ITSMCore
4.0.13
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 4 patch level 13.
Build for OTRS::ITSM 4 patch level 12.
Build for OTRS::ITSM 4 patch level 11.
Build for OTRS::ITSM 4 patch level 10.
Build for OTRS::ITSM 4 patch level 9.
Build for OTRS::ITSM 4 patch level 8.
Build for OTRS::ITSM 4 patch level 7.
Build for OTRS::ITSM 4 patch level 6.
Build for OTRS::ITSM 4 patch level 5.
Build for OTRS::ITSM 4 patch level 4.
Build for OTRS::ITSM 4 patch level 3.
Build for OTRS::ITSM 4 patch level 2.
Build for OTRS::ITSM 4.
Build for OTRS::ITSM 4 rc1.
Build for OTRS::ITSM 4 beta5.
Build for OTRS::ITSM 4 beta4.
Build for OTRS::ITSM 4 beta3.
Build for OTRS::ITSM 4 beta2.
Build for OTRS::ITSM 4 beta1.
The OTRS::ITSM Core package.
Das OTRS::ITSM Core Paket.
4.0.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package ITSMCore.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>GeneralCatalog 4.0.13</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMCore zu installieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>GeneralCatalog 4.0.13</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de instalar el modulo ITSMCore de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES REQUERIDOS</strong>
<ul>
<li>GeneralCatalog 4.0.13</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the service menu, you need to add them as member to the group 'itsm-service'.
<br/>
<br/>
The menu items that were added by this package will be visible after you log-in to the system again.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>HINWEIS</strong>
<br/>
<br/>
Um Benutzern Zugriff auf das Service-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-service' sein.
<br/>
<br/>
Die von diesem Paket hinzugefügten Menü-Punkte sind erst nach einem erneuten Anmeldevorgang im System sichtbar.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>AVISO</strong>
<br/>
<br/>
Para poder permitir el acceso a los usuarios al menu de servicios, usted necesita agregarlos como miembros del grupo 'itsm-service'.<br/>
<br/>
Los elementos del menu que fueron agregados por este packete serán visibles despues de que cierre y abra su sesion de nuevo.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATTENTION</strong>
<br/>
<br/>
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from these tables will be irrevocably lost!
<br/>
<br/>
The group 'itsm-service' that was created during package installation will be deactivated.
You can activate this group again in the admin area.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ACHTUNG</strong>
<br/>
<br/>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
<br/>
<br/>
Die von diesem Paket angelegte Gruppe 'itsm-service' wird deaktiviert.
Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
<br/>
<br/>
El grupo 'itsm-service' que fue creado durante la instalación será desactivado.
Usted puede activar este grupo de nuevo en el area de admin.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package ITSMCore.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>GeneralCatalog 4.0.13</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMCore zu aktualisieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>GeneralCatalog 4.0.13</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de instalar el modulo ITSMCore de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES REQUERIDOS</strong>
<ul>
<li>GeneralCatalog 4.0.13</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
GeneralCatalog
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_3_2_91();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_2();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgrade();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
2015-09-23 17:07:27
opms.otrs.com
IyEvdXNyL2Jpbi9wZXJsCiMgLS0KIyBiaW4vb3Rycy5BZGRTZXJ2aWNlLnBsIC0gYWRkIG5ldyBTZXJ2aWNlcwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8xYjI2MWFkMDZmOGRlNDE5MDUxMGYyOGI4YTI2MGJkNjI2NjcwNWNjL2Jpbi9vdHJzLkFkZFNlcnZpY2UucGwKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQUZGRVJPIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKIyBvciBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBGaW5kQmluIHF3KCRSZWFsQmluKTsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKTsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvS2VybmVsL2NwYW4tbGliJzsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvQ3VzdG9tJzsKCnVzZSBHZXRvcHQ6OlN0ZDsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKIyAtLS0KIyBJVFNNCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKIyAtLS0KCm15ICVQYXJhbTsKCiMgY3JlYXRlIG9iamVjdCBtYW5hZ2VyCmxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJyA9PiB7CiAgICAgICAgTG9nUHJlZml4ID0+ICdPVFJTLW90cnMuQWRkU2VydmljZScsCiAgICB9LAopOwoKbXkgJE5vT3B0aW9ucyA9ICRBUkdWWzBdID8gMCA6IDE7CgojIGdldCBvcHRpb25zCm15ICVPcHRzOwojIC0tLQojIElUU00KIyAtLS0KI2dldG9wdHMoICdobjpwOmM6JywgXCVPcHRzICk7CmdldG9wdHMoICdobjpwOmM6Qzp0OicsIFwlT3B0cyApOwojIC0tLQoKaWYgKCAkT3B0c3tofSB8fCAkTm9PcHRpb25zICkgewojIC0tLQojIElUU00KIyAtLS0KIyAgICBwcmludCBTVERFUlIgIlVzYWdlOiAkRmluZEJpbjo6U2NyaXB0IC1uIDxOYW1lPiAtcCA8UGFyZW50PiAtYyA8Q29tbWVudD5cbiI7CiAgICBwcmludCBTVERFUlIgIlVzYWdlOiAkRmluZEJpbjo6U2NyaXB0IC1uIDxOYW1lPiAtcCA8UGFyZW50PiAtYyA8Q29tbWVudD4gLUMgPENyaXRpY2FsaXR5PiAtdCA8VHlwZT5cblxuIjsKIyAtLS0KICAgIGV4aXQ7Cn0KCmlmICggISRPcHRze259ICkgewogICAgcHJpbnQgU1RERVJSICJFUlJPUjogTmVlZCAtbiA8TmFtZT5cbiI7CiAgICBleGl0IDE7Cn0KCm15ICRTZXJ2aWNlTmFtZTsKCiMgbG9va3VwIHBhcmVudCBzZXJ2aWNlIGlmIGdpdmVuCmlmICggJE9wdHN7cH0gKSB7CiAgICAkUGFyYW17UGFyZW50SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxvb2t1cCgKICAgICAgICBOYW1lICAgPT4gJE9wdHN7cH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgaWYgKCAhJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICBwcmludCBTVERFUlIgIkVSUk9SOiBDYW4ndCBhZGQgU2VydmljZTogUGFyZW50ICckT3B0c3twfScgZG9lcyBub3QgZXhpc3QhXG4iOwogICAgICAgIGV4aXQgMTsKICAgIH0KICAgICRTZXJ2aWNlTmFtZSA9ICRPcHRze3B9IC4gJzo6JzsKfQoKJFNlcnZpY2VOYW1lIC49ICRPcHRze259OwoKIyBjaGVjayBpZiBzZXJ2aWNlIGFscmVhZHkgZXhpc3RzCm15ICVTZXJ2aWNlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKbXkgJVJldmVyc2UgPSByZXZlcnNlICVTZXJ2aWNlTGlzdDsKaWYgKCAkUmV2ZXJzZXskU2VydmljZU5hbWV9ICkgewogICAgcHJpbnQgU1RERVJSICJFUlJPUjogQ2FuJ3QgYWRkIFNlcnZpY2U6IFNlcnZpY2UgJyRTZXJ2aWNlTmFtZScgYWxyZWFkeSBleGlzdHMhXG4iOwogICAgZXhpdCAxOwp9CiMgLS0tCiMgSVRTTQojIC0tLQoKIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBJVFNNQ3JpdGljYWxpdHkKbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgVmFsaWQgICAgICAgPT4gMSwKICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgIH0sCik7CgojIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIElUU01Dcml0aWNhbGl0eQpteSAlUG9zc2libGVWYWx1ZXM7CkRZTkFNSUNGSUVMRDoKZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKfQoKbXkgJUNyaXRpY2FsaXR5ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiRQYXJhbXtDcml0aWNhbGl0eX0gPSAkQ3JpdGljYWxpdHl7ICRPcHRze0N9IHx8ICcnIH07CmlmICggIWRlZmluZWQgJFBhcmFte0NyaXRpY2FsaXR5fSApIHsKICAgIGlmICggISRPcHRze0N9ICkgewogICAgICAgIHByaW50IFNUREVSUiAiRXJyb3I6IENhbid0IGFkZCBTZXJ2aWNlOiBObyBjcml0aWNhbGl0eSBnaXZlbiB2aWEgLUMgb3B0aW9uIVxuIjsKICAgIH0KICAgIGVsc2lmICggIWRlZmluZWQgJFBhcmFte0NyaXRpY2FsaXR5fSApIHsKICAgICAgICBwcmludCBTVERFUlIgIkVycm9yOiBDYW4ndCBhZGQgU2VydmljZTogQ3JpdGljYWxpdHkgJyRPcHRze0N9JyB1bmtub3duIVxuIjsKICAgIH0KICAgIHByaW50ICJcbkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcblxuIjsKICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJUNyaXRpY2FsaXR5ICkgewogICAgICAgIHByaW50ICJcdCckQ3JpdGljYWxpdHknXG4iOwogICAgfQogICAgZXhpdCAxOwp9CgojIGdldCBzZXJ2aWNlIHR5cGUgbGlzdApteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKbXkgJVNlcnZpY2VUeXBlID0gcmV2ZXJzZSAleyRTZXJ2aWNlVHlwZUxpc3R9OwokUGFyYW17VHlwZUlEfSA9ICRTZXJ2aWNlVHlwZXsgJE9wdHN7dH0gfHwgJycgfTsKaWYgKCAhZGVmaW5lZCAkUGFyYW17VHlwZUlEfSApIHsKICAgIGlmICggISRPcHRze3R9ICkgewogICAgICAgIHByaW50IFNUREVSUiAiRXJyb3I6IENhbid0IGFkZCBTZXJ2aWNlOiBObyBzZXJ2aWNlIHR5cGUgZ2l2ZW4gdmlhIC10IG9wdGlvbiFcbiI7CiAgICB9CiAgICBlbHNpZiAoICFkZWZpbmVkICRQYXJhbXtUeXBlSUR9ICkgewogICAgICAgIHByaW50IFNUREVSUiAiRXJyb3I6IENhbid0IGFkZCBTZXJ2aWNlOiBTZXJ2aWNlIHR5cGUgJyRPcHRze3R9JyB1bmtub3duIVxuIjsKICAgIH0KICAgIHByaW50ICJcbkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcblxuIjsKICAgIGZvciBteSAkU2VydmljZVR5cGUgKCBzb3J0IGtleXMgJVNlcnZpY2VUeXBlICkgewogICAgICAgIHByaW50ICJcdCckU2VydmljZVR5cGUnXG4iOwogICAgfQogICAgZXhpdCAxOwp9CgojIC0tLQoKIyB1c2VyIGlkIG9mIHRoZSBwZXJzb24gYWRkaW5nIHRoZSByZWNvcmQKJFBhcmFte1VzZXJJRH0gPSAnMSc7CgojIFZhbGlkcmVjb3JkCiRQYXJhbXtWYWxpZElEfSA9ICcxJzsKJFBhcmFte05hbWV9ICAgID0gJE9wdHN7bn0gfHwgJyc7CiRQYXJhbXtDb21tZW50fSA9ICRPcHRze2N9OwoKaWYgKCBteSAkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKCVQYXJhbSkgKSB7CiAgICBwcmludCAiU2VydmljZSAnJFNlcnZpY2VOYW1lJyBhZGRlZC4gSUQgaXMgJyRJRCdcbiI7Cn0KZWxzZSB7CiAgICBwcmludCBTVERFUlIgIkVSUk9SOiBDYW4ndCBhZGQgU2VydmljZVxuIjsKICAgIGV4aXQgMTsKfQoKZXhpdCgwKTsK
H4sIAAAAAAACA+1dXZPaOBZ9z6+gyMtMFVHr05bDdKZ2UjW7WzVT2ZpkXuaFEqCmvTE2ZZvuMA/721eyoRuMjcG2nCYRqWQGuOhK4p6jqyMh/fTzl2UweJBx4kfh7RABOBzIcBbN/XBxO/zz069v+PDnd69+mvvirfq7iMVyoD4RJvrZ7fA+TVdvb24eHx9BsElEGsUg8NcgkTf/E0EgbpTRzfDdq8Fgv4C5SIV+bfuqSNPYn65TOQjFUt4Op2L2eRFH63A+zK22drMoiOLBgwhuh6/vssfwZlvMzUE5J8peiYWcxlJ8ri4aqofnNSl6JeNisctVlPjKJN2sjkwqytH/7tlsrRJlFC7evf4Hep1XafvCc1llFa10ki5FvPDDYz+qb4K8IzDgGGPVGczjHnSpi3Z9crm7ab/ugn7dxf2685PJKorTWPjpsctpFAVShLnXOxEksrmjZCYCFWOn2gUBw4QjBgnjunkuwc393flpGnXUpPzlJwBeCuZF7M9PY/nAoqKUR3+e3k++1HRg8w7Ly98YK//BT/xpIMta4Idp7gC1L37TTfHFbygj9eePt4yIvLTKUWPOJZPs8lFjsfbnMqkJtUObipLut2Y3db1etDu3Y/KXCmN45iIQGxlvi//lefQebL9gNdzEazkciFnqP+ye7fVJNP2vnKXbxn5MRTgX8XzwZvBJfkmHe7nJcODPb4cf4GFvFdunSlP8eNRdq+g5phDg1GMjRIDrIlrsiWMuqXIznRa9xKohIlwEsuAJAZdDb0zUf4mrnlNAOG7oOdXdUhP7BZsqgs9yiAO7Qrrx4dMfHwd08Kv6xuVjFH+uSD5OQLOK66MwLXOsXx/ciaUfbFT9RJgMB0m60TGkEtP8o/+SwYNM/ZnYD/XLa3Av/cV9aR32h20HHjxQO5+HcXlRbDZxd8hZFczl3uk/7RypPGERLmX5VyrD9XI7GJ3ppZSRLgPJQ1alIkyeq0JqsJe/mDPTGVT1i/zbl/Fvfij3CAtuCQu1JSwIMGZo5BDAISMG+QoChBziOKM3EEDmQozI2GWAEhdr715TspzKvydZe5q08tjSxQBqU+YCXGdKAc1McX2pDBDC2Eg1nVKHe6hZW2dRHMp4okMkqY4/eFST0vcucaxydTkpQv44URH6TwsPWdJ5HEfPCSeGlZx5sbOM+6t7ETcrei6S+0CGi1Pt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s/s9hQHlc/r06SlTpuTn5wsh8vLysrOzDx8+7EP8VatW6fV6o9H48ccfHzx40G1rz4sw0PjSSH19fU1NzZ49e4qKijyfFwAEXnd3txAiKoqPXgAAINzQawnoRWZmZn19vfRaWu2SkZFhMBjeeeedc+fOaTQaIcRPfvKTn/zkJ65HHThwQK1WCyEeffRR/+bT17wXL15csWLFqVOnurq6JkyYYDab/TvvlClT9Hr9vn37CgsLKyoq7r///gcffNCHOG+//falS5eUSmVaWtqTTz65du1a161nz571S7bFxcVCiIKCAunBT7L7r//6r88//1zuLBCGLl++fP/99y9YsEDuRDAwUsvwmBg+egGhZDDaR3pzoCxtOgHAZ3y+AXphMBikF27/Tku/OfdFqiv5wGKxeH4Adl/zzps3b/78+eXl5RqN5saNG/7qDOWaz4YNG+bOnTtz5syXX365oqLCL8HvPIjPUwfyQeOTJk16+umnAzYdIkdRUZHf68gIAOm/5DQOB4KTXq+/fv16z3HP7SN9u93emwMHWicaUBvKtra2AQUHgH5RWgIGYO7cuaWlpRs2bGhubj558mRFRcVbb73lW6jY2NjKysonnnjik08+KS4uPn78uA/zGgyG7OzspKSkmpqad99917dMPOczZsyYhx56aNasWZMnTx45cqRvwefPn7958+aXXnqpubn5lVdecdsqNVo6c+bMneTflwFdZ//KzMx87LHHAjYdIgdPUA5R0qolSktAcHJrrymEqKqqmjlzpvhu1aa9vf3pp5/eu3fvyJEj33zzTbdDBvSR5tq1a/Pmzbtw4UJBQcHWrVtVKpWHeW/fvr18+fK9e/fee++977zzzpgxY5w79Lq/VLp6/fXXN23a1NTUtGfPnoKCAuHShlLajYVOAPyFG/4BT7Rarevb0tJSk8mk1WrHjRu3f//+kpISaVz6F7rXdtHOEbdNUkug1NTUsrKy8vJyz/v3Ne/27duXLl2q0WhWr169cOFCZyYe5h1oPkKINWvWHD9+/MUXX/TmivUav6SkpK6uLjU1NS8vb8mSJa55CiFsNpv3n2x6je8ccfvT83kBQCBJq5a4IQ4IFYPdPnLXrl179+69fPmyWq1+/vnn+51Xo9E0NDScOHHigw8+EC5VIdpQAggG3JQLfGvy5MnFxcXTpk2TO5HgsnXr1itXrmzZ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69u3b1dVVY0ZM8Z5lEql2rZtW1NTU1NT065du5w3ykmHWCwWs9lcUVExcuTIfjPvmacUf/fu3Waz+c9//rO05t01zy+//PLs2bNeXple4/d1WXzIH0B4oLQEBIuioqI9e/Y4HI7W1tbt27cbDIampibvD//BD35w9uzZW7du/fnPf1ar1QUFBT7kcOjQIecSbsmxY8f+8Ic/HDp06Pbt2w0NDWvXrn366af/+7//W9r62WefzZgx47PPPpPenjx5csaMGSdPnpTeXrp0ye0zh+vHGs+RpT1Xrlz5q1/9qqurS/oFzHmsN9dq5MiRvf4i99VXXy1atGjLli0Gg8FgMLz66quLFy92Vpc8zyuZPn36gQMHvL6oACKa3W4XlJaAcOe2cgcAIg2lJSBYDBkyJD4+/tatW1FRUenp6QsWLBhQaWn69OnSC41G89JLLznrOwPyl7/8Zdy4ca4jL7300htvvDF+/Pj4+Hi1Wv2jH/1ox44da9askbbec88927dvX7JkSX19vcFgWLJkyfbt24cPH+7NXJ4jS6ZNmzZ16lSFQlFQUGC1Wp3jd3KtVq1a9Zvf/Obee+91nsKLL764atUqb+aVfP/73//rX//q5XQAIpndbpcK1pSWgPDW8yc0AIgoPCEOCBaff/75smXLTp48edddd33ve9+Lj4/funWr6wJpD7q6ujZv3vyHP/zh2rVrCQkJP/zhD337cNPa2pqcnOw6cubMGWcVxikhIcH5+u677/7973+/dOlSh8OxY8cO591w/eo3shCir4bid3Ktjh07tmvXLteRnJwct6VJnhuZp6Sk3Lx505u5AMilq6ursbFRpVINHTpUxjSku+GioqJYywDAZzqdrudPaFqttudNfAAgF0pLQLAYO3bs0aNHXUdmzpx5+PBhb47913/91/T09JMnT6akpFit1qtXrz7wwAM+5JCcnGwymdLS0pwj8fHxX3311T333NPvsX01NuqL95F7upNrJXp7bNyAKnEmkyklJcX7/QEE3u3bt7u6utw6xwUePbwB3DlKSACCHzfEAcGrqqrKyz3ffffdFStWpKWlxcTExMfH+/wr/fe///1z5865jsycOfOPf/yjh0OuXbv25JNPlpeXl5WV/fznP7927ZrnKZzPg+s38oB4f63+8R//8fPPP3cdOX369KOPPur9XNXV1Q8++OAAkgMQ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TU1N7du3b2JiYs1pTz/99AMPPOCtxjowMHDJJZdccsklzNEDAGyoF3olQRCi0Wg2mzVNc35+fnx8vBdGaQEAgBZRLW3G008/LQjCZZdddlrf9cwzz3zrW98yDMO7a1nWc88999xzz7361a/+/d///TUn/+hHP3rooYfqH3F6evo973lPMpnc3AXvvffeQ4cOrTn45S9/uf7uysrKysrKU0899e53vzscDjd6IkeOHBEE4ZWvfGWLS5Zu7lG25Aq//OUvDxw4UNu7p1AoPPXUU7/97W//8A//8JJLLqmd9vDDD99///21u3Nzc3NzcwsLC61kQ+tEUdzhfZS26hE/85nPPPjgg//5n//ZymPt37//1a9+9W233XbmjwsA7UOW5bGxMe+jmqWlpeHhYb8TAQCAdkG1tBle6TA5Odn6t+RyuW9/+9uGYVx44YX79u1LJpPlcvk3v/nN//zP//z85z/fu3fvrl276s9/5JFHrr766le84hW6ri8sLPzgBz9IpVIHDx6sjQY63QsePnx43759F198cSKRqFVCu3fvvuSSS6ampnRdNwxjbm7uJz/5yezs7MGDB9/whjc0ei7z8/OCIKy5fhOtPMqdd97ZZIjQ5nIuLCzcd999ruu+4hWvuOqqq+LxeDabPXjw4GOPPXbgwIHJycmhoSHvtP/6r/8SBOGyyy7bt29fLBbL5XIPPvjgL3/5yxafILpbsVi86667HnzwQe/uhnXVF77whVe/+tW33nprK6PqAKCDBAKBsbGx2dlZb6x0/cddAACgl1EtbUapVBIEQdf1NcdPrUVqRx5++OFqtfp7v/d7b33rW70jgUBg3759sizfd999jz766Jqm5uqrr67Ntpuamrr22mv/5V/+5fjx47UTTveCl1122etf//o18W6++ebabU3T9u7dOzAwcNdddx09erRJZVMsFgVBiEajjU7Ykkc58ys88sgjjuOcc845b3nLW7wjyWTyuuuuKxQKx44de/jhh9/85jcLgvDoo486jvPSl7702muv9U7r7++/9tpri8XiU0891eJzxA7byQFQd9999759+17ykpd4dzd83PPOO+/SSy/9wQ9+8I53vGP70wHAjtI0bXh4eGFhIZ1OK4rS19fndyIAAOA/qqUdcuzYMUEQrrjiijXHL7jggvvuu+/kyZNrjq/ZXm18fFwQhHw+v+kLXnrppaem8obnPPvss9lstjaxThCE1dXVFp5Tq878UTZ3henpaUEQrrrqqjXHr7766mPHjtV6Ou/Gvn371px25ZVXUi1BEIR77rnnhhtuOK1vefvb3/7DH/5w+6ql5557rq+vL5FIbNP1AWwJwzAkSVKUbnutFY1GTdNMpVLLy8uqqrY4tx0AAHSxltbKwRreq6j6osdzZ501X8pkMoIgfOUrX/nkJz/513U+//nPCy+MA6oXj8fr73ob/dq2vekL9vf3rzmyvLz8pS996eGHH15aWqrvawRBsCyrydOPRCLrPv11bfpRzvwKuVxOEITBwcE1x715cLX83mmnjuofGBhoJV5HqFar733ve5PJ5MjIyOc+97na2quO43zqU5/as2dPIpF417veVftrI4riP/3TP+3evVvTtCuvvPJ///d/Nzz/rrvumpyc9OZaHj169G1ve1symezr67v++utXVlZaCWlZ1h133LFr167+/v6///u/9w6ueykvvyiKtSey4SNWq9UPfOADIyMjIyMjH/jAB6rVavOfTL1Dhw5deeWVtbu1cwzDeP/73+9979/93d/Vf8urXvWqRx99tJVnfbqeffbZG2+88YYbbjj1XzSAtmIYxszMzOzsbIv/s+ssiUQiFou5rjs/P1/7jQoAAHoW1dJmjI6OCi8MimmRN4nGcRzHcdw63lfrOyPPhhuvnO4FT92/5sc//nG5XB4fH/+TP/mTj3zkI3fcccedd955++23b/hcTuvpb/pRtvAK+NSnPjU9Pf3kk0/+6le/+u///u/a8X/4h3/46U9/+pOf/OSZZ54xTfOOO+6ofelHP/rRT3/605WVlTe+8Y1/8Rd/seH5P/vZz7wZiIIg3HDDDe9///tnZmZOnDgxPj7+V3/1V62E/Nu//duDBw/+5Cc/efbZZ2dmZryD617K+3te/xd+w0f89Kc//Zvf/ObQoUOHDh164oknPvOZzzT/ydRbWFjw/s6v8ZnPfObo0aNPPPHEoUOH7rvvvvovjY2Nzc3NtfKsWzc9Pf3Hf/zH55133je/+c3bb7+dvZmANifV8TvLthgaGtI0zXGc+fn5U191AACAntJtg7R3xrnnnnvkyJFHHnnkoosuavElY19fXyqVuuWWW7Zqzcszv6A3Eextb3tb/fCHVCq14Teee+65//d///fwww+38vQ3/ShnfoVYLJZOp5eXl6empuqPLy0tCXVrRXmnpVKpiYmJ+tNaHGvTEb7xjW/ce++9Y2NjgiDcddddF1xwgXf8y1/+8ve///09e/YIgvD5z3/+iiuuqA0X+tKXvjQyMiIIwoc//OHPfvazG57/j//4j971BUF4/PHHvRuapn3605+uPVxzX//617/3ve/t3bvXC3lal9rwtH//93+/5557vP/EX/ziF6+77rq//uu/bvKTqddocaV/+7d/++EPf+hNVv3iF7944YUXtvI0N2FmZub222//j//4D8dxLMuamJiIRCI//vGPva/eeeedTf45KIrCXJXuYxjGiRMnPve5z/kdBBtwHKd+fGX3cV03m83atq2qaiwW6+Jn2oT3mQoAAD2OamkzLrroop/+9Kfz8/MHDhzYv39/K+3SOeec89BDDz3wwAPe0tFn7swv6H3GuGYNiNo2WE1cdNFFP/vZzxYWFho9fcMwDhw44G1m1/qjKIpiWVa1WvVm/515zl27dqXT6QceeGBNtfSLX/xCEITdu3d7d3fv3p1Opx988MG3v/3t9ac99NBDGz5Ep5ibm/P6IEEQzjrrrNrx6enp8847r3a3/j+l1ysJghAOh8vl8obn1/+QDx069NGPfvTXv/61N21TluVWQs7MzJx99tlrDrZ4qQ1Pm5ubqz3xs88+e3Z2tnZ83Z9MvdHR0bm5uVOzzc7O1l9zzcOtO9BpE8rl8oc//OFvfetbkiQ5jqMoSrVarR+Wdfjw4S15IHSW48ePe/Uo4Lta/96b1VIoFGItcwAAqJY2Q1GUG2644etf//qhQ4dmZmYuv/zyXbt2xWIxWZYrlcrCwsKTTz655lv27dv3+OOP/+pXvyoWi5dffvnQ0FAkEjEMI51OHz9+/Mknn3zPe95zWhnO/ILDw8Ozs7M/+MEP3vCGN8Tj8Uwm89BDD9VGfzQhy/Lb3vY27+nPzc298pWv3LVrl67rlmWl0+mjR48++uijxWLRq5ZafxRvHNavf/3riy++OBAInHnOK6644vHHHz9y5Mg999zzqle9qq+vb3V19eDBg08//bQsy7UV0C+//PLHHnvsqaeeOnDgwJVXXhmLxXK53EMPPdRNa3iPjY0999xzXiv07LPP1o5PTU3df//9tZZtQ03Or39H8Y53vOOOO+74zne+4/3MWxxYNzk5eezYsZe97GX1Bxtdas0bmA0fcWxs7Nlnn33pS18qCMKxY8e8oUZC459MvUsvvfSBBx44tVoaHx+vXfOZZ56p/9IDDzxw+eWXt/KsN6Rp2je/+c2PfexjH//4x3/84x9blrW6unrgwAFvyTAA8F21Wp2ZmXEcJxKJjI6O9mbBBABAj6Na2qTJycmbb775u9/97sLCwg9/+MNTT4hGo/v376+/e9NNN33rW986cuTIkSNHzjzAmV/wNa95zTe+8Y1jx455m815Lr/88laWH56YmLj55pu/853vzM3N3X333Wu+GggEvF7ptB7lpS996cGDB++///7777/fO+Kthr7pnCMjI2984xsPHDhw+PDh+pEdoiju379/eHi4dtof/MEf/OhHP3r00Ufrr3nppZceOnSoxRE3be7GG2/80Ic+9JWvfEUQhA996EO14+9973vf/e53f/GLX9y7d++RI0c+/elPf/Ob32xynRbPLxaLsVgsEolMT0//5V/+ZYshb7755ltuueWrX/1qf3//Jz/5SW9OXKNLDQwM/Pa3vz3//PNbfMQbb7zx1ltv/ed//mdBEG699dYbb7yx+U+m3pve9KZvf/vbf/qnf7rm+E033fTBD37wa1/7miAIH/jAB+q/9N3vfvemm25q8Ym34qKLLrrnnnuefPLJj33sY/fee+9nP/vZL3zhC1t4fQDYtGAwOD4+Pjs7WywWFxcXa4NeAQBA7+jOpSV3xuTk5C233PLmN7/53HPPjcViiqKoqtrX13f++edfd911t956a+19r2diYuJ973vf6173uomJiVAoJElSKBQaHx9/zWte8773vW8TAc7wgi95yUtuuummyclJRVECgcD4+Pib3/zm+jpsw0e/5ZZb3vSmN51zzjne0w8Gg6Ojo9dcc82tt9768pe//HQf5ZprrrnqqqsSicSaNudMcl522WV/9md/dv7550ciEUmSIpHI+eef/653veuSSy6pP+3KK6985zvfuXv37kAgEAgExsbG3vSmN73uda8TXtibr9Pdfvvtk5OTL3vZy17xile86lWvqq3p7v0Fvv7662Ox2Dvf+c5a4dJIi+d/9atfve2226LR6Gtf+9prrrmmxZAf+chH9u3bd8011+zdu7c2va7RpW677bZ9+/bVPhvf8BFvv/32888//9JLL7300ksvuOCCj3/8481/MvX+6I/+6OGHHz569Oia4x//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zs0331ypVC677LJnn322p6enr69v/fr1l19+eaVSuemmm7773e9WO4e/bYjG3U/ZunXrmjVrDj744C1btvzlX/5lbZ8bb7xxw4YNixYt+sEPfvDBBx/k8/mdO3c+88wzt99++5FHHrnv9zj8skdayfLly3O53IMPPljb+M///M+5XO7UU08daZ3PPPPM3XffXZvlTUxmLQEAMLHs3LkzlUpFGVOjawGYXj744IMlS5YUCoX777//kksuGXD0Bz/4waWXXppKpd5+++3FixfvfnrtzKBhHn366ac/+9nPfuxjH9uyZUu1saOjo6ur65lnnjnhhBP28Y6GU9sQh4ZfSTTIgw8+eOGFF37qU5964YUXqoc+9alPvfTSS//yL/9ywQUXDHah3RUKhWOOOaZYLL766quZTGb4J44/s5YAAJhYZs+e3dLSIlcCGH+rV68uFArnnXfe7rlSEASXXHLJueeeWygUVq9ePVpXPOqoo4Ig6O7urm2Mdtw79NBD93r6HjchGsWdiYZfSeScc85pb29/8cUXX3755ajlpZdeeumll9rb27/whS+M6NK33377a6+9ds8996TT6RGdOP5ESwAAAEAQBMHPfvazIAiuuOKKwTpEhx577LHRuuKLL74YBMGAOVDHHHNMEASXXXbZr371q9G6UH1GWklzc3O0jff3v//9qCV68cUvfrG5uXn4133ttde++c1vfvGLX6xjGd34syAOAAAACIIgaG9v37Fjx/bt29vb2/fYobOzc+7cuR0dHZ2dnbsfHdGCuM7OzqeeeuprX/vaxo0bV61adeutt1Z7PvXUU2eccUYulwuC4OCDDz766KOPOOKIZcuWnXLKKYlEYq9XHH7jXg/VUckrr7xy9NFHz5kzZ/PmzUEQLFiwYOfOna+88sqRRx459PenqlKpfPazn/3lL3/5xhtvzJ07d+gKJwLREgAAABAEQZBMJkulUrFYbGpq2mOHYrGYSqWampqKxeLuR4cTLe3uggsueOCBB5LJZG3jG2+8cfvtt69Zs6anp6fauHjx4r/7u78799xzh3k7w6xt6LKHWUntIMcdd9zzzz//4IMPhmF40UUXHXfccevXr9/rharuvPPO66+//r777rvsssuGU2HDiZYAAACAIBiXWUsDLF68+OGHH47Wne2uXC7/7//+74YNG9avX//II4+89dZbsVjsoYceOuuss4Z7S8OobTjBzV4rqR1k9erVV1999amnnhqG4dq1a1evXn3llVcO80Lvv//+0qVLjznmmCeeeKL6HRMtAQAAAJPA8ccf/9xzzz366KOnn376Hjs8+uijn/vc544//vhnn31296PDXxBXLBbffffdb3zjGz/60Y/mzp37P//zP/PmzRu6tkqlsnLlyjvuuGPA89eGaR+jpb1WUjtId3f3woULs9lsEASZTObDDz+cOXPmMC+0YsWKxx577OWXXz788MPrrnCc2cYbAAAACIIgOO2004Ig+N73vjdYh+hQ1G1fJJPJww477Ic//OHnPve5bdu2rVy5cq+nxOPxm266KQiCDRs27OPV99FeK5k1a9Z5550XhmEYhueff36UKw3TI488UigUPvnJT8ZqRIdG8cl3o0u0BAAAAARBEFx11VXJZPLf//3f//Ef/3H3oz/60Y9+/OMfp1Kpq666alQuF4vFvvvd7zY1NT3wwANvvvnmXvtHj2lra2sblavvi71WUt0mqfpiChMtAQAwEVUqla6urg8//LDRhQBMI7/zO7/zzW9+MwiCiy+++Mtf/vJzzz3X39+fzWaff/75K6+88ktf+lIQBHfcccf+++8/Wlc87LDDLr300lKpVDtxaenSpStXrvzpT3/6wQcf5PP5XC737rvv3n333dHGRmeeeWa15x4n8ozi7J7hVzLAsmXLollLJ5988oiuGO5J7aF9uZ0xYq8lAAAmojAM33nnnUqlsv/++6fT6UaXAzCNfOMb31i1alWlUhnQHo/Hb7vttltuuWWwE4e/11KtzZs3L1myJJfLrV+//tOf/nQw+LPkgiA4/PDD165dO3/+/CHGHH7jMA/VXcnwLzS0Cb7XkmgJAIAJaseOHfF4vK2tLZFINLoWgOllw4YNd9111+OPP/7rX/86DMPFixcvX778uuuuW7p06RBn1RctBUFw8803f+tb3zrttNN+9rOfBUHw2muvrVmz5sknn9ywYcPWrVvDMOzo6Fi6dOnZZ599+eWX11Jm0CwAAAsoSURBVP57w1hHS/tYyfAvNDTREgAAAABTk72WAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAgAktDMOenp5t27Y1uhAAYA9ESwAATHRbt27duXNnPp9vdCEAU18sFou+DiYIgkqlcv/995988snz5s1LpVIHHnjgl770paeffro6wooVK/Y4+IoVK6IRqn76059+/vOfnzt3bjKZnD9//rnnnvvYY4+N8S0yykRLAABMaLFYLJ1OB0GQzWYbXQvAdBHW2P3tdddd9+Mf//hv/uZv3nrrrd7e3kcfffT444//8z//8+rpr7zyyssvvzxgzJdffvmVV16pbVm1atUtt9xy1VVXvfnmm7t27XrooYfK5fLpp58+9vfHaIpFPxYAADBh7dixo7Ozs7W1deHChY2uBWCKi8UGBgW7t7S1tb333nsdHR2DjfD3f//369at+7d/+7fa9vPPP3/58uXXXHNNNNqjjz564403PvPMM5lMprbbX/3VX61atWp0boZxYdYSAAATXfSpI5vN+mdRgIlg4cKFv/jFL4bocPnll7/wwgu//OUvqy1vvPHGiy++ePnll1db7rzzzlWrVg3IlYIgqOZK//AP/7BkyZJUKrVkyZLvfe971Q6xWOzBBx/8zGc+09bWlkgkosaHH374mGOOaW5uPvDAA7///e/v4w0yImYtAQAwCbz99tuVSmX//fePFscBMEaGM2vp8ccfv+iii5YsWbJs2bLDDz982bJlBxxwwID+999//5NPPvnDH/4warz44otPOeWUSy65pDra3LlzX3vttblz5+6xjIceeuj6669/4IEHjjvuuOeee+7iiy++++67/+iP/iga/7DDDrvnnntOOOGElpaWIAiefvrpz3/+83ffffeKFSveeOONCy644K677jrzzDNH8/vC4ERLAABMAps3b+7r6+vo6Ghvb290LQBT2XCipSAI+vv7161b9+yzz27YsOG//uu/Pv3pTz/wwAPz58+v9i+Xy0ceeeRPfvKTAw88cOPGjStWrHj11VcTiUR1tGQymc1mm5qa9ljGSSed9PWvf/3ss8+O3j700EN/+7d/+/Of/zwa/8knnzz55JOrnU8//fQrr7zyvPPOi94+++yz11577XPPPTc63xH2RrQEAMAksHPnzm3btrW0tCxatKjRtQBMZcOMlmrlcrmvfOUrW7ZsWbNmTW3/Bx988Oc///ndd9999dVXL1u27IILLqg9Onfu3Ndff32//fbb45jt7e1vv/32nDlzorc7duw45JBDurq6ohGy2WztJNa5c+d2dnbWnp5IJEql0sjvnnrYawkAgEkgWvJguyWACSidTt9xxx1r164d0P6nf/qn69evf+GFF55//vk/+ZM/GXD0M5/5zJNPPln3FWvf9vb29vT01D7GTq40nkRLAABMAqlUKpFIhGGYzWYbXQvAdHf99deXy+Xals2bN8+YMWNAt3g8fsstt5xxxhm33HJLPD4wf7j22mtvu+223f+rfttttwVBcPjhh9cGT0888cQnP/nJweo59thjX3jhhTpuhFEhWgIAYHKoTlxqdCEA092dd9553HHHrVmzpru7e9euXWvXrr3wwguvu+663Xuec84527dv/8IXvrD7oT/4gz/4wz/8w5NPPvknP/lJd3d3Lpf77//+77PPPjt6QtwNN9xw/fXXr1u3rre3d926dV/5ylduuummweq59dZbb7jhhieffLK3t7evr+/xxx9fsWLFKN4vQ7PXEgAAk8OuXbu2bNmSTqf333//RtcCMGUNZ6+lX/ziF/fdd9/atWt//etfZzKZI4444oorrrjkkksG6z/EaP/5n/955513rl+/vru7u6Oj46STTrrmmmtOPfXUIAhWr1797W9/+7333jvggANuuummK664Yojxn3jiiVtvvXX9+vWVSuWEE05YuXJlNAjjQLQEAMDkUCwWN27cGIvFDj744N0XVgAADeF/yQAATA7JZDKZTNpuCQAmFNESAACTRrTdUn9/f6MLAQD+j2gJAIBJI5PJBHbyBoCJRLQEAMCkEUVL+Xx+wEOvAYBGES0BADBpNDU1pVKpwMQlAJgwREsAAEwm0XZLoiUAmCBESwAATCbRmjg7eQPABCFaAgBgMslkMvF4vKmpKQzDRtcCMMW99957H3zwQfS6t7d348aN0et8Pr99+/Zqt+7u7gGTSWs7b9++/f333x8wcnWEfD6/adOmTZs29fT0jMk9MPZi/pcMAMDkEoZhLBZrdBUAU9zDDz/86quvdnV1HXTQQeedd95Xv/rVo446qrm5+Y//+I//+q//etu2bWvWrAmCoKen55RTTvmLv/iL8847Lzrxww8/rHY+8cQT77333kMPPXTWrFnXXntt1OGtt96qjrBu3brvfOc7xx577PLly3/v936vYXfLPhAtAQAAAHu2a9euq6+++sQTT1y6dOnv//7vn3POOf/xH/8RBMHZZ58dRUurVq1qb29fvHhxNVq66667qp0/8YlPXHjhhUccccRpp5322GOP1Y4cjbBu3bp//dd/Peuss84444x43MqqSckfGwAAALAHYRjeeOONX//617dt2zZ37tzdO6xbt+7jH//4fvvtFwTBO++88/zzz2ez2drOJ5988j333HPffff96le/qnaoHeGwww47//zzN2/e/NWvfnUc7oix0NToAgAAAICJ6IYbbjj//POPPvro9evXb968+YgjjhiwHnnt2rVdXV1vvvlmIpGYNWvWli1bDjnkkEWLFlU7n3nmmYcddlgulzv22GM3b968cePGQw45JHogQ2ThwoULFy4MguCss84a79tjlFgQBwAAAAx077333nPPPSeddNKhhx76Z3/2Z1ddddWCBQuOOuqos88+e9WqVY888siXv/zlm2++OQiCf/qnf0qn09UFcV1dXdXOy5Ytu++++zZv3nz55ZcvW7as2qE6wu/+7u8+9dRTmzdvPuWUUy699NKG3S37QLQEAAAA7EUYhrlcrnbC0TA79/T0tLa2DrGPUnd3d0tLSzKZHLVaGV+iJQAAAADqZBtvAAAAAOokWgIAYLIql8ulUqnRVQDAtCZaAgBgUurq6nrnnXe6uroaXQgATGuiJQAAJqVUKhUEgVlLANBYtvEGAGBSCsOwUqkkEolGFwIA05poCQAAAIA6WRAHAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAATG5bt2595513stlsowsBgOlItAQAwORWLpfL5bJoCQAaQrQEAMDklslkgiAQLQFAQ4iWAACY3KJoKZfLhWHY6FoAYNoRLQEAMLk1NzfH4/FKpZLP5xtdCwBMO6IlAAAmPWviAKBRREsAAEx6oiUAaBTREgAAk146nQ6CIJfLNboQAJh2REsAAEx66XQ6FouVy+VCodDoWgBgehEtAQAw6cVisWjikjVxADDOREsAAEwFtlsCgIYQLQEAMBWIlgCgIURLAABMBdF2S6VSqVQqNboWAJhGREsAAEwF8Xi8ubk5MHEJAMaXaAkAgCnCmjgAGH+iJQAApggPiQOA8SdaAgBgiohmLRUKhXK53OhaAGC6EC0BADBFJBKJVCoVmLgEAONItAQAwNRhuyUAGGeiJQAApo4oWsrlco0uBACmi6ZGFwAAAKMmk8nMmDEjCpgAgHEQC8Ow0TUAAAAAMClZEAcAAABAnURLAAAAANRJtAQAAABAnURLAAAAANRJtAQAAABAnf4fsET7pqelch8AAAAASUVORK5CYII=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcm9kdWN0TmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIiBDb25maWdMZXZlbD0iMjAwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiwgc2hvd24gaW4gdGhlIHdlYiBpbnRlcmZhY2UsIHRhYnMgYW5kIHRpdGxlIGJhciBvZiB0aGUgd2ViIGJyb3dzZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+T1RSUzo6SVRTTSA0PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6Vmlld01vZGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGV0ZXJtaW5lcyB0aGUgd2F5IHRoZSBsaW5rZWQgb2JqZWN0cyBhcmUgZGlzcGxheWVkIGluIGVhY2ggem9vbSBtYXNrLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IkNvbXBsZXgiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTaW1wbGUiPlNpbXBsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tcGxleCI+Q29tcGxleDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUGFja2FnZTo6UmVwb3NpdG9yeUxpc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSIgQ29uZmlnTGV2ZWw9IjIwMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbnMgY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290cnMvcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpQYWNrYWdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Imh0dHA6Ly9mdHAub3Rycy5vcmcvcHViL290cnMvaXRzbS9wYWNrYWdlczQvIj5bLS1PVFJTOjpJVFNNIDQgTWFzdGVyLS1dIGh0dHA6Ly9mdHAub3Rycy5vcmcvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIHByaW9yaXR5IG1hdHJpeC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkNyaXRpY2FsaXR5ICZsdDstJmd0OyBJbXBhY3QgJmx0Oy0mZ3Q7IFByaW9yaXR5PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkFkbWluPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhck1vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TW9kdWxlPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpOYXZCYXJNb2R1bGVBZG1pbjwvTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+Q3JpdGljYWxpdHkgJmx0Oy0mZ3Q7IEltcGFjdCAmbHQ7LSZndDsgUHJpb3JpdHk8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPlN5c3RlbTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NDMwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5UYWJsZS5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gJ0RlcGVuZHNPbicsIGFuZCB0aGUgRGlyZWN0aW9uIGlzICdTb3VyY2UnLCBvbmx5ICdEZXBlbmRzIG9uJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rICdSZXF1aXJlZCBmb3InKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiAnSW5jbHVkZXMnIHdpdGggdGhlIGRpcmVjdGlvbiAnVGFyZ2V0Jy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlICdTb3VyY2UnLCAnVGFyZ2V0Jywgb3IgJ0JvdGgnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTITwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlcGVuZHNPbiI+Qm90aDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNBbHRlcm5hdGl2ZVRvIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0FsdGVybmF0aXZlVG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIj5BbHRlcm5hdGl2ZSB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSI+QWx0ZXJuYXRpdmUgdG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjQ29ubmVjdGVkVG8iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnQ29ubmVjdGVkVG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiPkNvbm5lY3RlZCB0bzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNEZXBlbmRzT24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnRGVwZW5kc09uJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSI+RGVwZW5kcyBvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSI+UmVxdWlyZWQgZm9yPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI0luY2x1ZGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0luY2x1ZGVzJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSI+SW5jbHVkZXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiPlBhcnQgb2Y8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjUmVsZXZhbnRUbyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdSZWxldmFudFRvJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSI+UmVsZXZhbnQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiPlJlbGV2YW50IHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0FsdGVybmF0aXZlVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdDb25uZWN0ZWRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Db25uZWN0ZWRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0luY2x1ZGVzJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkluY2x1ZGVzPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwNCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UmVsZXZhbnRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMjAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnQWx0ZXJuYXRpdmVUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMjEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjIyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjQwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdBbHRlcm5hdGl2ZVRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkRlcGVuZHNPbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI2MCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNjEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUGFyZW50Q2hpbGQnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlBhcmVudENoaWxkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI2MiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI4MCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ1NlcnZpY2UnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjgxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnU2VydmljZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUGFyZW50Q2hpbGQnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjgyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnU2VydmljZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgoKICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzM0MDAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNV29ya09yZGVyJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTVdvcmtPcmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+Tm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTVdvcmtPcmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDIwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNoYW5nZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU006OkZyb250ZW5kOjpUZXh0QXJlYSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5XaWR0aCBvZiBJVFNNIHRleHRhcmVhcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjc4PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI0luY2lkZW50U3RhdGVzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5HZW5lcmFsQ2F0YWxvZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPklUU006OkNvcmU6OkluY2lkZW50U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj5JbmNpZGVudCBTdGF0ZSBUeXBlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjIj5JbmNpZGVudCBTdGF0ZSBUeXBlLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0id2FybmluZyI+V2FybmluZzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJvcGVyYXRpb25hbCI+T3BlcmF0aW9uYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaW5jaWRlbnQiPkluY2lkZW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+RnVuY3Rpb25hbGl0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPk9wdGlvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkNTUyMjIzEwMC1JVFNNIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6V2ViPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5EZWZhdWx0LmNzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuU2VhcmNoLmNzczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1JVFNNIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5JbmNpZGVudFN0YXRlLmpzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5pdHNtLXNlcnZpY2U8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPklUU00gU2VydmljZSBPdmVydmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlNlcnZpY2U8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+U2VydmljZS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5TZXJ2aWNlczwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5JdGVtQXJlYTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2U8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TZXJ2aWNlPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4zMTAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5TZXJ2aWNlIE92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5TZXJ2aWNlPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlNlcnZpY2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TTEEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tc2VydmljZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5JVFNNIFNMQSBPdmVydmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlNMQTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5TTEEgT3ZlcnZpZXc8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlNMQTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNU0xBPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlNlcnZpY2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TZXJ2aWNlWm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLXNlcnZpY2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+U2VydmljZSBab29tPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5ab29tPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPlNlcnZpY2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNlcnZpY2VQcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlNlcnZpY2UgUHJpbnQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPlByaW50PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPlNlcnZpY2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNMQVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLXNlcnZpY2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+U0xBIFpvb208L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPlpvb208L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U2VydmljZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU0xBUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlNMQSBQcmludDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+UHJpbnQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U2VydmljZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMDAtQmFjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVNlcnZpY2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVNlcnZpY2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTVNlcnZpY2VQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2VQcmludDtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMjAwLUxpbmsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnVMaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5MaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1TZXJ2aWNlO1NvdXJjZUtleT1bJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU0xBOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01TTEE6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNMQU1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNMQTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU0xBOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TTEFNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TTEFQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNMQVByaW50O1NMQUlEPVslIERhdGEuU0xBSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OlNlcnZpY2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWxsb3dzIGRlZmluaW5nIHNlcnZpY2VzIGFuZCBTTEFzIGZvciB0aWNrZXRzIChlLiBnLiBlbWFpbCwgZGVza3RvcCwgbmV0d29yaywgLi4uKSwgYW5kIGVzY2FsYXRpb24gYXR0cmlidXRlcyBmb3IgU0xBcyAoaWYgdGlja2V0IHNlcnZpY2UvU0xBIGZlYXR1cmUgaXMgZW5hYmxlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JDQu9GC0LXRgNC90LDRgtC40LLQtdC9INC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn0JTQvtGB0YLRitC/0L3QvtGB0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICfQntGB0L3QvtCy0L3QsCDRgdC40YHRgtC10LzQsC9CYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9Ch0LLRitGA0LfQsNC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC4INC+0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ9Cj0YHQu9GD0LPQuCDQt9CwINC60YDQsNC50L3QuCDQv9C+0YLRgNC10LHQuNGC0LXQu9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9CT0YDQtdGI0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfQmtC70LjQtdC90YLRgdC60LAg0YHQuNGB0YLQtdC80LAvRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0JjQoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9CY0KIg0J7Qv9C10YDQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfQktC70LjRj9C90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQtdC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfQp9Cw0YHRgiDQvtGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfQn9GA0L7QtdC60YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ9CS0YDQtdC80LUg0LfQsCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn0KHRitC+0YLQstC10YLQtdC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ9Ce0YLRh9C10YLQvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQndC10L7QsdGF0L7QtNC40Lwg0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfQktGA0LXQvNC1INC30LAg0YDQsNC30YDQtdGI0LDQstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn0JLRgNC10LzQtSDQt9CwINC+0YLQs9C+0LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ9Ce0LHRg9GH0LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn0KHQtNC10LvQutC4L9GC0YDQsNC90LfQsNC60YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9Ce0YHQvdC+0LLQtdC9INC00L7Qs9C+0LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfQvtC/0YDQtdC00LXQu9C10L0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ9Ca0YDQuNGC0LjRh9C90L7RgdGCPC0+0JLQu9C40Y/QvdC40LU8LT7Qn9GA0LjQvtGC0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvQvdC+INCy0YDQtdC80LUg0LzQtdC20LTRgyDQuNC90YbQuNC00LXQvdGC0LjRgtC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfQn9C+0YHQu9C10LTQvdCwINC/0YDQvtC80Y/QvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9Cf0L7RgdC70LXQtNC90L4g0L/RgNC+0LzQtdC90LXQvSDQvtGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfQodCy0YrRgNC30LDQvdC4IFNMQSDQtNC+0LPQvtCy0L7RgNC4JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jc19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm7DrSBrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3R1cG5vc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdaw6FrbGFkbsOtIHJvemhyYW7DrS9CYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1Nwb2plbiBzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdTb3XEjWFzbsO9IFN0YXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ1Vrw6F6a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1rDoXZpc8OtIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTbHXFvmJ5IGtvbmNvdsO9bSB1xb5pdmF0ZWzFr20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnQ2h5YnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnWsOha2F6bmlja8OpIHJvemhyYW7DrS9Gcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnxZjDrXplbsOtIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgT3BlcmFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdWbGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnU3RhdiBJbmNpZGVudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdaYWhybnVqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0RhbMWhw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ8SMw6FzdCB6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfEjGFzIG9ibm92eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50bsOtIGsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1Bvxb5hZG92YW7DvSBwcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnxIxhcyDFmWXFoWVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnxIxhcyBvZHBvdsSbZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBIFDFmWVobGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdQxZllaGxlZCBTbHXFvmJ5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1Byb3N0b3Igw5pkcsW+YnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICfFoGtvbGVuw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha2NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1rDoWtsYWRuw60gc21sb3V2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAncMWZaWTEm2xpdCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnS3JpdGnEjW5vc3Q8LT5WbGl2PC0+UHJpb3JpdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW3DoWxuw60gxI1hcyBtZXppIGluY2lkZW50eSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpxI1ub3N0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICdTTEEtSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdOYXBvc2xlZHkgem3Em27Em24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnTmFwb3NsZWR5IHptxJtuaWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBJbmZvcm1hY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1DFmWnFmWF6ZW7DqSBTbHXFvmJ5JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnU291xI1hc27DvSBTdGF2IEluY2lkZW50dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdQxZlpxZlhemVuw6kgU0xBIHNtbG91dnknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVGlsZ8OmbmdlbGlnaGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdGb3JidW5kZXQgdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBZmjDpm5nZXIgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0t1bmRlc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWpsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgb3BlcmF0aW9uZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnUMOldmlya25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVudCB0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luZGtsdWRlcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGFmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdHZW5ldGFibGVyaW5nc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50IGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdLcsOmdmVzIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdMw7hzbmluZ3NyYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZWFrdGlvbnN0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBIG92ZXJzaWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdTZXJ2aWNlIG92ZXJzaWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2Ugb21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1Ryw6ZuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWt0aW9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJsaWdnZW5kZSBrb250cmFrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbGl0ZXQgPC0+IFDDpXZpcmtuaW5nIDwtPiBQcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXN0aWQgbWVsbGVtIEluY2lkZW50cyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1NpZHN0IMOmbmRyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lkc3Qgw6ZuZHJldCBhZic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdUaWxrbnl0dGVkZSBzZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ051dsOmcmVuZGUgSW5jaWRlbnQgdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnVGlsa255dHRlZGUgU0xBcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB6dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdWZXJmw7xnYmFya2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnVmVyYnVuZGVuIG1pdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnQWt0dWVsbGVyIFN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnSMOkbmd0IGFiIHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnQW53ZW5kZXItU2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWhsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBCZXRyaWViJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0F1c3dpcmt1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdWb3JmYWxsc3N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0JlaW5oYWx0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdTb25zdGlnZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1RlaWwgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdXaWVkZXJoZXJzdGVsbHVuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZsO8cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnQmVuw7Z0aWd0IGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnTMO2c3VuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZWFrdGlvbnN6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQSDDnGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdTZXJ2aWNlIMOcYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZS1CZXJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHJhaW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcnBpbm5pbmcgQ29udHJhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ3p1b3JkbmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbGl0w6R0IDwtPiBBdXN3aXJrdW5nIDwtPiBQcmlvcml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdWZXJ3YWx0dW5nIGRlciBQcmlvcml0w6R0IGF1cyBkZXIgS29tYmluYXRpb24gdm9uIEtyaXRpa2FsaXTDpHQgPC0+IEltcGFjdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXTDpHQgenVvcmRuZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5kZXN0emVpdCB6d2lzY2hlbiBJbmNpZGVudHMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0w6R0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICdTTEEtSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdadWxldHp0IGdlw6RuZGVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdadWxldHp0IGdlw6RuZGVydCB2b24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQS1JbmZvcm1hdGlvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdadWdlaMO2cmlnZSBTZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdTZXJ2aWNlLUluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdadWdlaMO2cmlnZSBTTEFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1NlcnZpY2UtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWVsbGVyIFZvcmZhbGxzdGF0dXMnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kbW9kdWwtUmVnaXN0cmF0aW9uIGRlciBBZG1pbklUU01DSVBBbGxvY2F0ZSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBUHJpbnQtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNMQVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNlcnZpY2UtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVByaW50LU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnUHJpb3JpdMOkdHMtTWF0cml4IHZlcndhbHRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBadXLDvGNrLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgWnVyw7xjay1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTTEEtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBEcnVja2VuLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnw5xiZXIgZGllc2VzIE1vZHVsIHdpcmQgZGVyIERydWNrZW4tTGluayBpbiBkZXIgTGlua2xlaXN0ZSBkZXIgU0xBLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgTGluay1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTZXJ2aWNlLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldGVyIGZ1ZXIgZGVuIFZvcmZhbGxzc3RhdHVzIGluIGRlciBBbnNpY2h0IGZ1ZXIgZGllIEVpbnN0ZWxsdW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ1NldHplbiBkZXMgVHlwcyB1bmQgZGVyIFJpY2h0dW5nIGRlciB2ZXJ3ZW5kZXRlbiBMaW5rcywgdW0gZGVuIEluY2lkZW50LVN0YXR1cyB6dSBiZXJlY2huZW4uIERlciBTY2hsw7xzc2VsIGlzdCBkZXIgTmFtZSBkZXMgTGluay1UeXBzICh3aWUgaW4gTGlua09iamVjdDo6VHlwZSBkZWZpbmllcnQpLCB1bmQgZGVyIFdlcnQgaXN0IGRpZSBSaWNodHVuZyBkZXMgSW5jaWRlbnRMaW5rVHlwZSwgZGllIGJlZm9sZ3Qgd2VyZGVuIHNvbGwsIHVtIGRlbiBJbmNpZGVudC1TdGF0dXMgenUgYmVyZWNobmVuLiBadW0gQmVpc3BpZWwsIHdlbm4gZGVyIEluY2lkZW50TGlua1R5cGUgYXVmIFwnRGVwZW5kc09uXCcgdW5kIGFscyBSaWNodHVuZyBcJ1F1ZWxsZVwnIGdlc2V0enQgaXN0LCB3aXJkIG51ciBcJ0RlcGVuZHNcJyBMaW5rcyBnZWZvbGd0ICh1bmQgbmljaHQgZGVtIEdlZ2VudGVpbCBcJ0JlbsO2dGlndCBmw7xyXCcpIHVtIGRlbiBJbmNpZGVudFN0YXRlIHp1IGJlcmVjaG5lbi4gU2llIGvDtm5uZW4gc292aWVsZSBMaW5rLVR5cGVuIHVuZCBSaWNodHVuZ2VuIGhpbnp1ZsO8Z2VuIHdpZSBTaWUgbcO2Y2h0ZW4sIHouQi46IFwnRW50aMOkbHRcJyBtaXQgZGVyIFJpY2h0dW5nIFwnVGFyZ2V0XCcuIEFsbGUgaW4gZGVyIFN5c2NvbmZpZyB1bnRlciBMaW5rb2JqZWN0OjpUeXBlIGRlZmluaWVydGVuIFZlcmtuw7xwZnVuZ3NhcnRlbiBzaW5kIG3DtmdsaWNoIHNpbmQgdW5kIGRpZSBSaWNodHVuZyBrYW5uIFwnUXVlbGxlXCcsIFwnWmllbFwnIG9kZXIgXCdCZWlkZVwnIHNlaW4uIFdJQ0hUSUc6IE5hY2hkZW0gU2llIMOEbmRlcnVuZ2VuIGFuIGRpZXNlciBTeXNjb25maWctRWluc3RlbGx1bmcgZ2VtYWNodCBoYWJlbiwgZsO8aHJlbiBTaWUgZGFzIFNrcmlwdCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBhdXMsIGRhbWl0IGFsbGUgSW5jaWRlbnQtU3RhdHVzIGFuaGFuZCBkZXIgbmV1ZW4gRWluc3RlbGx1bmdlbiBiZXJlY2huZXQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01DaGFuZ2VcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnVGlja2V0XCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1BhcmVudENoaWxkXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdEZXBlbmRzT25cJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnIG1pdCBhbmRlcmVuIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0Nvbm5lY3RlZFRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBhbmRlcmVuIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0luY2x1ZGVzXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdEZXBlbmRzT25cJyBtaXQgXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdTZXJ2aWNlXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnU2VydmljZVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdQYXJlbnRDaGlsZFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIGRlciBnbGVpY2hlIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiB1bmdlcmljaHRldGVyIExpbmt0eXAuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgdmVyc2NoaWVkZW5lciBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gZ2VyaWNodGV0ZXIgTGlua3R5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0Nvbm5lY3RlZFRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0RlcGVuZHNPblwnLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIGRlciBnbGVpY2hlIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiB1bmdlcmljaHRldGVyIExpbmt0eXAuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgdmVyc2NoaWVkZW5lciBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gZ2VyaWNodGV0ZXIgTGlua3R5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0luY2x1ZGVzXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGVuIExpbmt0eXAgXCdSZWxldmFudFRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdBbnphaGwgZGVyIFplaWNoZW4gcHJvIFplaWxlIGluIElUU00tVGV4dEFyZWFzLic7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJhbnRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29uZWN0YWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBY3R1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9zdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpY2lvIGRlIFVzdWFyaW8gRmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3Jlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnQWRtaW5pc3RyYWNpw7NuIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFjacOzbiBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlbCBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdXllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUaWVtcG8gZGUgUmVjdXBlcmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ0luZm9ybWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVlcmlkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1Rhc2EgZGUgUmVzb2x1Y2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RpZW1wbyBkZSBSZXNwdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnRGVzY3JpcGNpw7NuIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnRGVzY3JpcGNpw7NuIGRlIFNlcnZpY2lvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdBcmVhLVNlcnZpY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnRW50cmVuYW1pZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FjY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGNvbiBUZXJjZXJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnQXNpZ25hcic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnVXJnZW5jaWEgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnQWRtaW5pc3RyYXIgbGEgcHJpb3JpZGFkIHJlc3VsdGFudGUgYWwgY29tYmluYXIgVXJnZW5jaWEgPC0+IEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBc2lnbmFyIHByaW9yaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RpZW1wbyBNw61uaW1vIGVudHJlIEluY2lkZW50ZXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbmNpYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnSW5mb3JtYWNpw7NuLVNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1vIGNhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1vIGNhbWJpbyBwb3InOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkZWwgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aWNpb3MgQXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJ0luZm9ybWFjacOzbi1TZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSBBY3R1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBBc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBTZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGN0dWFsIGRlbCBpbmNpZGVudGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgbGEgY29uZmlndXJhY2nDs24gZGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZW4gZWwgw6FyZWEgZGUgYWRtaW5pc3RyYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEFab29tIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNlcnZpY2Vab29tIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQWRtaW5pc3RyYXIgbGEgbWF0csOteiBkZSBwcmlvcmlkYWRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdGFyIHVuIHbDrW5jdWxvIHBhcmEgcmVncmVzYXIgZW4gZWwgbWVuw7ogZGUgc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdGFyIHVuIHbDrW5jdWxvIHBhcmEgcmVncmVzYXIgZW4gZWwgbWVuw7ogZGUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdGFyIHVuIHbDrW5jdWxvIHBhcmEgaW1wcmltaXIgZW4gZWwgbWVuw7ogZGUgc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciB1biB2w61uY3VsbyBwYXJhIGltcHJpbWlyIGVuIGVsIG1lbsO6IGRlIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciBlbCB2w61uY3VsbyAiVmluY3VsYXIiIGVuIGVsIG1lbsO6IGRlIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgcGFyYSBsb3MgZXN0YWRvcyBkZSBsb3MgaW5jaWRlbnRlcyBlbiBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ0NvbmZpZ3VyYXIgZWwgdGlwbyB5IGRpcmVjY2lvbiBkZSBsb3MgZW5sYWNlcyBwYXJhIHNlciB1c2Fkb3MgcGFyYSBjYWxjdWxvIGRlbCBlc3RhZG8gZGVsIGluY2lkZW50ZS4gTGEgY2xhdmUgZXMgZWwgbm9tYnJlIGRlbCBlbmxhY2UgKGNvbW8gZXN0YSBkZWZpbmlkbyBlbiBMaW5rT2JqZWN0OjpUeXBlKSwgeSBlbCB2YWxvciBlcyBsYSBkaXJlY2Npw7NuIGVuIGVsIEluY2lkZW50TGlua1R5cGUgcXVlIGRlYmUgc2VndWlyIHBhcmEgY2FsY3VsYXIgZWwgZXN0YWRvIGRlbCBpbmNpZGVudGUuIFBvciBlamVtcGxvIHNpIGVsIEluY2lkZW50TGlua1R5cGUgZXN0YSBjb25maWd1cmFkbyBlbiBcJ0RlcGVuZGVEZSwgeSBsYSBkaXJlY2Npb24gZXMgXCdPcmlnZW5cJywgc29sbyBcJ0RlcGVuZGUgZGVcJyBlbmxhY2VzIHNlcsOhIHNlZ3VpZG8gKHkgbm8gZWwgZW5sYWNlIG9wdWVzdG8gXCdSZXF1ZXJpZG8gcGFyYVwnKSBwYXJhIGNhbGN1bGFyIGVsIGVzdGFkbyBkZWwgaW5jaWRlbnRlLiBQdWVkZSBhw7FhZGlyIG3DoXMgdGlwb3MgZGUgZGlyZWNjaW9uZXMgZGUgYXZpc28gY29tbyBkZXNlZSwgZWptLiBcJ0luY2x1eWVcJyBjb24gbGEgZGlyZWNjaW9uIFwnT2JqZXRpdm9cJy4gVG9kb3MgbG9zIHRpcG9zIGRlZmluaWRvcyBlbiBlbCBTeXNjb25maWcgb3BjaW9uIExpbmtPYmplY3Q6OlR5cGUgc29uIHBvc2libGUgeSBsYSBkaXJlY2Npb24gcHVlZGUgc2VyIFwnT3JpZ2VuXCcsIFwnT2JqZXRpdm9cJywgbyBcJ0FtYm9zXCcuCsKhSU1QT1JUQU5URTogREVTUFVFUyBERSBSRUFMSVpBUiBDQU1CSU9TIEVOIExBIE9QQ0lPTiBERUwgU0lTQ09ORklHIEVTIE5FQ0VTQVJJTyBDT1JSRVIgRUwgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIEFTw40gVE9ETyBMT1MgRVNUQURPUyBERSBMT1MgSU5DSURFTlRFUyBTRVLDgU4gUkVDQUxDVUxBRE9TIEVOIEJBU0UgQSBMQSBOVUVWQSBDT05GSUdVUkFDScOTTiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNoYW5nZVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdUaWNrZXRcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdUaWNrZXRcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvcyBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQ29ubmVjdGVkVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvcyBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3Ryb3Mgb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdJbmNsdWRlc1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvcyBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdUaWNrZXRcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdTZXJ2aWNlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnU2VydmljZVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdTZXJ2aWNlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0FsdGVybmF0aXZlVG9cJy4gU2kgZWwgU291cmNlTmFtZSB5IGVsIFRhcmdldE5hbWUgY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gbm8gZGlyZWNjaW9uYWRvLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIGRpcmVjY2lvbmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQ29ubmVjdGVkVG9cJy4gU2kgZWwgU291cmNlTmFtZSB5IGVsIFRhcmdldE5hbWUgY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gbm8gZGlyZWNjaW9uYWRvLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIGRpcmVjY2lvbmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0RlcGVuZHNPblwnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdJbmNsdWRlc1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4gU2kgZWwgU291cmNlTmFtZSB5IGVsIFRhcmdldE5hbWUgY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gbm8gZGlyZWNjaW9uYWRvLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIGRpcmVjY2lvbmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnRGVmaW5lIGVsIGFuY2hvIGRlIGxhcyB0ZXh0YXJlYXMgZGVsIElUU00uJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mYV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn2KzYp9uM2q/YstuM2YbbjCDYqNix2KfbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfZhduM2LLYp9mGINiv2LEg2K/Ys9iq2LHYsyDYqNmI2K/Zhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ9m+2LTYqiDYtdit2YbZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfZhdiq2LXZhCDYp9iz2Kog2KjZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn2YbZhdin24zYtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn2YjYp9io2LPYqtmHINin2LPYqiDYqNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfYs9ix2YjbjNizINqp2KfYsdio2LEg2YbZh9in24zbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfYrti32KfZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9is2YTZiCDYtdit2YbZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn2YXYr9uM2LHbjNiqIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAn2LnZhdmE24zYp9iqIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9in2KvYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2LHYrtiv2KfYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9mF2LTYqtmF2YQg2KfYs9iqINio2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfYqNmC24zZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn2KjYrti024wg2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn2b7YsdmI2pjZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn2LLZhdin2YYg2KjZh9io2YjYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9mF2LHYqtio2Lcg2KjYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfar9iy2KfYsdi024wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn2YXZiNix2K8g2YbbjNin2LIg2KfYs9iqINio2LHYp9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9mG2LHYriDYrdmEINmF2LPYptmE2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ9iy2YXYp9mGINm+2KfYs9iu2q/ZiNuM24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAn2K7ZhNin2LXZhyBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ9iu2YTYp9i12Ycg2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfYqNiu2LQg2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ9ii2YXZiNiy2LTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfYqtix2KfaqdmG2LTigIzZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9mC2LHYp9ix2K/Yp9ivINii2YXYp9iv2Ycg2obYp9m+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfYp9iu2KrYtdin2LUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ9in2YfZhduM2KogPC0+INin2KvYsSA8LT4g2KfZiNmE2YjbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICfZhdiv24zYsduM2Kog2KfZhNmI24zYqiDZhtin2LTbjCDYp9iyINiq2LHaqduM2Kgg2KfZh9mF24zYqiA8LT4g2KfYq9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfYqtiu2LXbjNi1INin2YTZiNuM2KonOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfYrdiv2KfZgtmEINiy2YXYp9mGINio24zZhiDYr9mIINix2K7Yr9in2K8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfYp9mH2YXbjNiqJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICfYp9i32YTYp9i52KfYqiBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn2KLYrtix24zZhiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9ii2K7YsduM2YYg2KrYutuM24zYsSDYqtmI2LPYtyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAn2KfYt9mE2KfYudin2KogU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfYs9ix2YjbjNiz4oCM2YfYp9uMINmF2LHYqtio2LcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAn2KfYt9mE2KfYudin2Kog2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCDYsdiu2K/Yp9ivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQdmH2KfbjCDZhdix2KrYqNi3JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ9in2LfZhNin2LnYp9iqINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2qnZhtmI2YbbjCDYsdiu2K/Yp9ivJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMIEFkbWluSVRTTUNJUEFsbG9jYXRlINiv2LEg2KjYrti0INmF2K/bjNix24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNMQSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBUHJpbnQg2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBWm9vbSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU2VydmljZVByaW50INiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlWm9vbSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9mF2K/bjNix24zYqiDZhdin2KrYsduM2LMg2KfZhNmI24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINio2KfYstqv2LTYqiDYr9ixINmF2YbZiNuMINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINio2KfYstqv2LTYqiDYr9ixINmF2YbZiNuMIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDahtin2b4g2K/YsSDZhdmG2YjbjCDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAn2YXYp9qY2YjZhNuMINio2LHYp9uMINmG2YXYp9uM2LQg2YTbjNmG2qkg2obYp9m+INiv2LEg2YXZhtmI24wgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn2b7Yp9ix2KfZhdiq2LHZh9in24zbjCDYqNix2KfbjCDZiNi22LnbjNiq4oCM2YfYp9uMINix2K7Yr9in2K8g2K/YsSDZhtmF2KfbjCDYqtmG2LjbjNmF2KfYqiDYtNiu2LXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICfYp9mG2K/Yp9iy2Ycg2LnYsdi2INqp2YbYqtix2YTigIzZh9in24wg2YjYsdmI2K8g2YXYqtmGIElUU00nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmUgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG9uaWJpbGl0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpw6kgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0V0YXQgYWN0dWVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEw6ltb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRMOpcGVuZCBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmljZSB1dGlsaXNhdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJldXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3DDqXJhdGlvbnMgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXRhdCBkXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0F1dHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0IGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBzIGRlIHLDqXBhcmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnQ29ycmVzcG9uZCDDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpcyBwb3VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1RhdXggZGUgcsOpc29sdXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBzIGRlIHLDqXBvbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ0FwZXLDp3UgZGVzIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnQXBlcsOndSBkZXMgc2VydmljZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnWm9uZSBkZSBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnRm9ybWF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWN0aW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0IGV4dGVybmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2FsbG91ZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnQ3JpdGljaXTDqSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcHMgbWluaW1hbCBlbnRyZSBsZXMgaW5jaWRlbnRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaXTDqSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBwYXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmljZXMgYXNzb2Npw6lzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXRhdCBhY3R1ZWwgZFwnaW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBhc3NvY2nDqWVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0Nvbm5lc3NvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ1N0YXRvIEF0dHVhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RpbW9zdHJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpemlvIFV0ZW50ZSBGaW5hbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIE9wZXJhdGlvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGF0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF0byBkZWxsXCdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQWx0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcG8gZGkgUmVjdXBlcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSaWxldmFudGUgcGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JpY2hpZXN0byBwZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGFzc28gZGkgUmlzb2x1emlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRpIFJpc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ0Rlc2NyaXppb25lIGRlbGxvIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnRGVzY3JpemlvbmUgZGVsIFNlcnZpemlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ0FyZWEtZGktU2Vydml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdGb3JtYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYXppb25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnYXNzZWduYXJlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdVcmdlbnphIDwtPiBJbXBhdHRvIDwtPiBQcmlvcml0w6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW1vIFRlbXBvIFRyYSBJbmNpZGVudGknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbnppYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1VsdGltYSBtb2RpZmljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdVbHRpbWEgbW9kaWZpY2EgZWZmZXR0dWF0YSBkYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aXppIEFzc29jaWF0aSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXRvIEF0dHVhbGUgZGVsbFwnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNzb2NpYXRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9qYV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5Luj5pu/77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ+WPr+eUqOaApyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+ODkOODg+OCr+OCqOODs+ODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfmjqXntprvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ+eKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn44OH44Oi44Oz44K544OI44Os44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfkvp3lrZjvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+OCqOODs+ODieODpuODvOOCtuODu+OCteODvOODk+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfjgqjjg6njg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn44OV44Ot44Oz44OI44Ko44Oz44OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVOODnuODjeODvOOCuOODoeODs+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU44Kq44Oa44Os44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9semfvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOOBrueKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ+WQq+OCgO+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+OBneOBruS7lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn5LiA6YOo77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+ODquOCq+ODkOODquODu+OCv+OCpOODoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+mWoumAo+mgheebru+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfjg6zjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn5b+F6aCI77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+WDj+W6puODrOODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn44Os44K544Od44Oz44K544K/44Kk44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQeOBruamguimsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn44K144O844OT44K544Gu5qaC6KazJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+OCteODvOODk+OCueODu+OCqOODquOCoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ+ODiOODrOODvOODi+ODs+OCsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICflj5blvJUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn5pSv5oyB44GZ44KL5aWR57SEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfphY3liIYnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ+mHjeimgeW6piA8LT4g5b2x6Z+/5bqmIDwtPiDlhKrlhYjluqYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ+mHjeimgeW6pjwtPuW9semfv+W6puOCkue1kOOBs+OBpOOBkeOBn+mam+OBruWEquWFiOW6pue1kOaenOOCkueuoeeQhuOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5YSq5YWI6aCG5L2N44Gu5Ymy44KK5b2T44GmJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn44Kk44Oz44K344OH44Oz44OI6ZaT44Gu5pyA5bCP5pmC6ZaTJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn6YeN6KaB5bqmJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICdTTEHmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5pyA57WC5aSJ5pu05pmC5Yi7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+acgOe1guWkieabtOiAhSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xB5oOF5aCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfplqLpgKPjgZnjgovjgrXjg7zjg5PjgrknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAn44K144O844OT44K55oOF5aCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jjga7nirbmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn6Zai6YCj44GZ44KLU0xBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+OCteODvOODk+OCueaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn44Kk44Oz44K344OH44Oz44OI44Gu54q25oWLJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfnrqHnkIbjgqjjg6rjgqLjgafjga5BZG1pbklUU01DSVBBbGxvY2F0ZeOBruODleODreODs+ODiOOCqOODs+ODieODouOCuOODpeODvOODq+OBrueZu+mMsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU0xB44Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNMQVByaW5044Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU0xBWm9vbeOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNlcnZpY2Xjgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNlcnZpY2VQcmludOOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TZXJ2aWNlWm9vbeOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+WEquWFiOW6puOBrumWoumAo+aAp+OCkueuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ+OCteODvOODk+OCueODoeODi+ODpeODvOOBp+ODkOODg+OCr+ODquODs+OCr+OCkuihqOekuuOBmeOCi+OBn+OCgeOBruODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnU0xB44Oh44OL44Ol44O844Gn44OQ44OD44Kv44Oq44Oz44Kv44KS6KGo56S644GZ44KL44Gf44KB44Gu44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ+OCteODvOODk+OCueODoeODi+ODpeODvOOBp+WNsOWIt+OCkuihqOekuuOBmeOCi+OBn+OCgeOBruODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ1NMQeODoeODi+ODpeODvOOBp+WNsOWIt+OCkuihqOekuuOBmeOCi+OBn+OCgeOBruODouOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfjgrXjg7zjg5Pjgrnjg6Hjg4vjg6Xjg7zjgafjgIzjg6rjg7Pjgq/jgI3jg6rjg7Pjgq/jgpLooajnpLrjgZnjgovjgZ/jgoHjga7jg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ+ioreWumuODk+ODpeODvOOBp+OBruOCpOODs+OCt+ODh+ODs+ODiOOCueODhuODvOOCv+OCueOBruODkeODqeODoeODvOOCv+ODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICfjgqTjg7Pjgrfjg4fjg7Pjg4jjga7nirbms4HjgpLlibLjgorlh7rjgZnjgZ/jgoHjgavjgIHliKnnlKjjgZXjgozjgovjg6rjg7Pjgq/jga7jgr/jgqTjg5fjgajmlrnlkJHjgpLoqK3lrprjgZfjgabjgY/jgaDjgZXjgYTjgIIg44Kk44Oz44K344OH44Oz44OI44Gu54q25rOB44KS5Ymy44KK5Ye644GZ44Gf44KB44Gr44CB44OV44Kp44Ot44O844GV44KM44KL44Kt44O844Gv44Oq44Oz44Kv44Gu44K/44Kk44OX5ZCNICjjg4fjg5Xjgqnjg6vjg4jjgafjga8gTGlua09iamVjdDo6VHlwZSnjgIHlgKTjga9JbmNpZGVudExpbmtUeXBl44Gu5pa55ZCR44KS55So44GE44KJ44KM44G+44GZ44CC5L6L44GI44GwSW5jaWRlbnRMaW5rVHlwZeOBjERlcGVuZHNPbuOAjH7jgavkvp3lrZjjgZnjgovjgI3jgZ3jgZfjgabjgIHmlrnlkJHjgYzjgr3jg7zjgrnjga7mmYLjga/jgIFEZXBlbmRzT27jgaDjgZHjgYzjg5Xjgqnjg63jg7zjgZXjgowo44Gd44GX44Gm44CB5Y+N5a++44GuUmVxdWlyZWQgZm9y44CMfuOBq+W/hemgiOOAjeOBp+OBr+OBquOBhCnjgIHjgqTjg7Pjgrfjg4fjg7Pjg4jjga7nirbms4HjgpLlibLjgorlh7rjgZnjga7jgavliKnnlKjjgZXjgozjgb7jgZnjgIIK44GV44KJ44Gr44Oq44Oz44Kv44K/44Kk44OX44KS5biM5pyb44GZ44KL5pa55ZCR44Gr6L+95Yqg44Gn44GN44G+44GZ44CC5L6LIEluY2x1ZGVz44CM5ZCr44KA44CN44Gu5pa55ZCR44Go44GX44GmVGFyZ2V044CM5a++6LGh44CN44CCTGlua09iamVjdDo6VHlwZeOBrueuoeeQhuOBp+S9nOaIkOOBleOCjOOBn+OBmeOBueOBpuOBruOCv+OCpOODl+OBjOWIqeeUqOWPr+iDveOAgeaWueWQkeOBr1wnU291cmNlXCfjgIzjgr3jg7zjgrnjgI0gXCdUYXJnZXRcJ+OAjOOCv+ODvOOCsuODg+ODiOOAjSwg44G+44Gf44GvIFwnQm90aFwn44CM5Lih5pa544CN44GM5Yip55So5Y+v6IO944Gn44GZ44CC6YeN6KaBOiDjgZPjga7nrqHnkIbpoIXnm67jga7lpInmm7TooYzjgaPjgZ/jgYLjgajjgavlv4XjgZogYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgIOOCkuWun+ihjOOBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmeOAguWun+ihjOW+jOOBmeOBueOBpuOBruOCpOODs+OCt+ODh+ODs+ODiOeKtuazgeOBjOaWsOOBl+OBhOioreWumuWApOOBq+abtOaWsOOBleOCjOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4oCYTm9ybWFs4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYSVRTTUNoYW5nZeKAmeOCquODluOCuOOCp+OCr+ODiOOBjOS7luOBruKAmFRpY2tldOKAmeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBleOCjOOCi+OCiOOBhuOBq+OAgeWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmE5vcm1hbOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmOimquWtkOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4oCY6Zai6YCj44GX44Gf4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYSVRTTUNoYW5nZeKAmeOCquODluOCuOOCp+OCr+ODiOOBjOKAmEZBUeKAmeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBleOCjOOCi+OCiOOBhuOBq+OAgeWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxBbHRlcm5hdGl2ZVRvL37jga7ku6Pmm7/jgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjgrXjg7zjg5PjgrnjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjOOCteODvOODk+OCueOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxSZWxldmFudFRvL37jgajplqLpgKPjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjgrXjg7zjg5PjgrnjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxBbHRlcm5hdGl2ZVRvL37jga7ku6Pmm7/jgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjg4HjgrHjg4Pjg4jjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjERlcGVuZHNPbi9+44Gr5L6d5a2Y44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44OB44Kx44OD44OI44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44OB44Kx44OD44OI44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxBbHRlcm5hdGl2ZVRvL37jga7ku6Pmm7/jgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjENvbm5lY3RlZFRvL37jgajjgaTjgarjgYzjgaPjgabjgYTjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeS7luOBruOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMSW5jbHVkZXMvfuOCkuWQq+OCgOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeS7luOBruOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxSZWxldmFudFRvL37jgajplqLpgKPjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNV29ya09yZGVy44CN44Kq44OW44K444Kn44Kv44OI44GM44CMRGVwZW5kc09uL37jgavkvp3lrZjjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNV29ya09yZGVy44CN44Kq44OW44K444Kn44Kv44OI44GM44CMTm9ybWFsL+mAmuW4uOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjERlcGVuZHNPbi9+44Gr5L6d5a2Y44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMU2VydmljZeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Xb3JrT3JkZXLjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxOb3JtYWwv6YCa5bi444CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMU2VydmljZeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjE5vcm1hbC/pgJrluLjjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxUaWNrZXTjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxOb3JtYWwv6YCa5bi444CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMRkFR44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxQYXJlbnRDaGlsZC/opqrlrZDjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxGQVHjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxTZXJ2aWNl44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMRkFR44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+ODquODs+OCr+ODu+OCv+OCpOODl1wnQWx0ZXJuYXRpdmVUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0Nvbm5lY3RlZFRvXCfjga7lrprnvqnjgafjgZnjgILjgoLjgZfjgr3jg7zjgrnlkI3jgYrjgojjgbPjgr/jg7zjgrLjg4Pjg4jlkI3jgYzlkIzjgZjlgKTjgpLlkKvjgpPjgafjgYTjgovloLTlkIjjgIHntZDmnpzjga7jg6rjg7Pjgq/jga/pnZ7nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgIHjgZ3jgYbjgafjgarjgYTntZDmnpzjga/nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0RlcGVuZHNPblwn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0luY2x1ZGVzXCfjga7lrprnvqnjgafjgZnjgILjgoLjgZfjgr3jg7zjgrnlkI3jgYrjgojjgbPjgr/jg7zjgrLjg4Pjg4jlkI3jgYzlkIzjgZjlgKTjgpLlkKvjgpPjgafjgYTjgovloLTlkIjjgIHntZDmnpzjga7jg6rjg7Pjgq/jga/pnZ7nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgIHjgZ3jgYbjgafjgarjgYTntZDmnpzjga/nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdSZWxldmFudFRvXCfjga7lrprnvqnjgafjgZnjgILjgoLjgZfjgr3jg7zjgrnlkI3jgYrjgojjgbPjgr/jg7zjgrLjg4Pjg4jlkI3jgYzlkIzjgZjlgKTjgpLlkKvjgpPjgafjgYTjgovloLTlkIjjgIHntZDmnpzjga7jg6rjg7Pjgq/jga/pnZ7nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgIHjgZ3jgYbjgafjgarjgYTntZDmnpzjga/nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnSVRTTSDjg4bjgq3jgrnjg4jjgqjjg6rjgqLluYUnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9tc19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVmVyZsO8Z2JhcmtlaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0RpaHVuZ2thbiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ1N0YXR1cyBzZWRpYSBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9zdHJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0JlcmdhbnR1bmcga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdQZW5nZ3VuYSBBa2hpciBTZXJ2aXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnS2VzaWxhcGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFzaSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdLZXNhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ2luc2lkZW4ga2VhZGFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ1Rlcm1hc3VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnU2VsYWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdTZWJhaGFnaWFuIGRhcmlwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ01hc2EgU2VtYnVoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdCZXJrYWl0YW4ga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ01lbGFwb3JrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnRGlwZXJsdWthbiB1bnR1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdrYWRhciBSZXNvbHVzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnTWFzYSBUaW5kYWsgYmFsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnTGloYXQgc2VtdWxhIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnTGloYXQgc2VtdWxhIHNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdLYXdhc2FuLVNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ0xhdGloYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnTWVuZW1wYXRrYW4gc2VtdWxhJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbCA8LT4gS2VzYW4gPC0+IEtldXRhbWFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnTWVuZ3VydXNrYW4gaGFzaWwga2V1dGFtYWFuIGtyaXRpa2FsIGdhYnVuZ2FuIDwtPiBLZXNhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0JlcmlrYW4ga2V1dGFtYWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWFzYSBtaW5pbWEgYW50YXJhIGluY2lkZW50JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ1NMQS1JbmZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ2RpdWJhaCBidWF0IGthbGkgdGVyYWtoaXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnS2FsaSB0ZXJha2hpciBkaXViYWggc2VtYXNhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEtSW5mb3JtYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQZXJraGlkbWF0YW4gQmVyc2VrdXR1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJ0luZm8gUGVya2hpZG1hdGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdJbnNpZGVuIHN0YXR1cyBzZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBIEJlcnNla3V0dSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgU2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdLZWphZGlhbiBrZWFkYWFuIHNlbWFzYSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsga29uZmlndXJhc2kgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZGkga2F3YXNhbiBhZG1pbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIGJhZ2kgb2JqZWsgQWdlbnRJVFNNU0xBIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNMQVByaW50IGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU0xBWm9vbSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIGJhZ2kgb2JqZWsgQWdlbnRJVFNNU2VydmljZSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZVByaW50IGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNlcnZpY2Vab29tIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnTWVuZ3VydXMgbWF0cmlrcyBrZXV0YW1hYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4ga2VtYmFsaSBwYXV0YW4gZGFsYW0gbWVudSBwZXJraGlkbWF0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBrZW1iYWxpIHBhdXRhbiBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIGNldGFrIGRhbGFtIG1lbnUgcGVya2hpZG1hdGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIHBhdXRhbiBjZXRhayBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIHBhdXRhbiBkYWxhbSBtZW51IHBlcmtoaWRtYXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRlciB1bnR1ayBrZWFkYWFuIGluc2lkZW4gbWVtYW5kYW5na2FuIGtldXRhbWFhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnVWJhaCBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0IFwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnSWJ1IEJhcGEgQW5hayBBbmFrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0FsdGVybmF0aXZlVG9cJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXRcJyBvYmplayBtZW5nZ3VuYWthbiBcJ0FsdGVybmF0aWYgVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldCBcJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldFwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBsYWluIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0FsdGVybmF0aXZlVG9cJyBwYXV0YW4gamVuaXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4gXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVrIG1lbmdndW5ha2FuIFwnQ29ubmVjdGVkVG9cJyBwYXV0YW4gamVuaXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBsYWluIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4tbGFpbiBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdUZXJtYXN1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnSVRTTSBDb25maWdJdGVtXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBvYmplayBcJ0NvbmZpZ0l0ZW0gSVRTTVwnbGFpbiB5YW5nIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIHlhbmcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnQ29uZmlnSXRlbSBJVFNNXCdvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuIFwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsIFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldFwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBvYmplayBcJ1BlcmtoaWRtYXRhbiBcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2Egb2JqZWsgXCdQZXJraGlkbWF0YW4gXCcgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnSWJ1IEJhcGEgS2FuYWsta2FuYWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBvYmplayBcJ1BlcmtoaWRtYXRhbiBcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnQWx0ZXJuYXRpdmVUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdDb25uZWN0ZWRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnQmVyZ2FudHVuZyBQYWRhXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGplbmlzIHBhdXRhbiBcJ1Rlcm1hc3VrXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnUmVsZXZhbnRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGViYXIga2F3YXNhbiB0ZWtzIElUU00uJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVGlsZ2plbmdlbGlnaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdLb2JsZXQgdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdOw6V2w6ZyZW5kZSB0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnQXZoZW5nZXIgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NsdXR0YnJ1a2VyLXRqZW5lc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZlaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lULWxlZGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVC1kcmlmdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdPbWZhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdIZW5kZWxzZXN0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0lua2x1ZGVyZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGF2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9zamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnR2plbm9wcHJldG5pbmdzdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdQw6VrcmV2ZCBmb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnT3BwcmV0dGluZ3NyYXRpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnUmVzcG9uc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtb3ZlcnNpa3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1RqZW5lc3RlLW92ZXJzaWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1RqZW5lc3Rlb21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyZW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Nqb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcmxpZ2dlbmRlIGtvbnRyYWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICd0aWxkZWxpbmcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpa2FsaXRldCA8LT4gT21mYW5nIDwtPiBQcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0FkbWluaXN0cmVyIHByaW9yaXRldHNyZXN1bHRhdCB2ZWQgw6Uga29tYmluZXJlIEtyaXRpa2FsaXRldCA8LT4gT21mYW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdUaWxkZWxpbmcgYXYgcHJpb3JpdGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXN0aWQgbWVsbG9tIEhlbmRlbHNlcic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnU0xBLWluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lzdCBlbmRyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lzdCBlbmRyZXQgYXYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzam9uIG9tIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnVGlsa255dHRlZGUgdGplbmVzdGVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJ1RqZW5lc3RlLWluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1RpbHN0YW5kIHDDpSBuw6V2w6ZyZW5kZSBoZW5kZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdUaWxrbnl0dGVkZSBTTEFlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2pvbiBvbSBUamVuZXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnVGlsc3RhbmQgcMOlIG7DpXbDpnJlbmRlIGhlbmRlbHNlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIGtvbmZpZ3VyYXNqb24gYXYgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgaSBhZG1pbi1vbXLDpWRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU0xBLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNMQVByaW50LW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU0xBWm9vbS1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNlcnZpY2Utb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNlcnZpY2VQcmludC1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TZXJ2aWNlWm9vbS1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdBZG1pbmlzdHLDqXIgcHJpb3JpdGV0c21hdHJpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCBzb20gdmlzZXIgdGlsYmFrZS1sZW5rZW4gaSB0amVuZXN0ZW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHRpbGJha2UtbGVua2VuIGkgU0xBLW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCBzb20gdmlzZXIgc2tyaXYtdXQtbGVua2VuIGkgdGplbmVzdGVtZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1bCBzb20gdmlzZXIgc2tyaXYtdXQtbGVua2VuIGkgU0xBLW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCBzb20gdmlzZXIgbGVua2UtbGVua2VuIGkgdGplbmVzdGUtbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0cmUgZm9yIGhlbmRlbHNlc3RpbHN0YW5kZXIgaSB2YWxndmlzbmluZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0JyZWRkZSBww6UgSVRTTSBzaW5lIHRla3N0b21yw6VkZXIuJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZWYgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdCZXNjaGlrYmFhcmhlaWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1ZlcmJvbmRlbiBtZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0h1aWRpZ2Ugc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBZmhhbmtlbGlqayB2YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0VpbmRnZWJydWlrZXIgc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGb3V0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBPcGVyYXRpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50IHN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0JldmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3ZlcmlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdPbmRlcmRlZWwgdmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdIZXJzdGVsdGlqZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1ZhbiBiZWxhbmcgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0Jlbm9kaWdkIHZvb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnT3Bsb3N0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZXNwb25zaWV0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQS1vdmVyemljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1NlcnZpY2Utb3ZlcnppY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2UtQXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyYWluaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWN0aWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAndG9la2VubmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdVcmdlbnRpZSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXRlaXQgdG9la2VubmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXRpamQgdHVzc2VuIGluY2lkZW50ZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbnRpZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnU0xBIEluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTGFhdHN0IGFhbmdlcGFzdCBvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdMYWF0c3QgYWFuZ2VwYXN0IGRvb3InOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBJbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdCaWpiZWhvcmVuZGUgU2VydmljZXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnU2VydmljZSBJbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdIdWlkaWdlIGluY2lkZW50IHN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdCaWpiZWhvcmVuZGUgU0xBcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdTZXJ2aWNlIEluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0h1aWRpZ2UgaW5jaWRlbnQtc3RhdHVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdCZWhlZXIgcHJpb3JpdGVpdGVuLW1hdHJpeCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXR5d2EgZGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3TEmXBub8WbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1BvZMWCxIVjem9uZSBkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnQWt0dWFsbnkgc3Rhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhY2phJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdaYWxlxbxuZSBvZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnVXPFgnVnYSB1xbx5dGtvd25pa2Ega2/FhGNvd2Vnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdCxYLEmWR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCB6YXJ6xIVkemFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBvcGVyYWN5am5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1dwxYJ5dyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YW4gemRhcnplbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnWmF3aWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0lubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ0N6xJnFm8SHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdDemFzIG9kenlza2FuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdPZHBvd2llZG5pZSBkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBvcnRvd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUG90cnplYm5lIGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0N6YXMgcm96d2nEhXphbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdDemFzIG9kcG93aWVkemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnUHJ6ZWdsxIVkIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUHJ6ZWdsxIVkIHVzxYJ1Z2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VrY2phIHNlcndpc293YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyZW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha2NqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2Fsb2thY2phJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcnl0eWN6bm/Fm8SHIDwtPiBXcMWCeXcgPC0+IFByaW9yeXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnWmFyesSFZHphbmllIHdhcnRvxZtjacSFIHByaW9yeXRldHUgZGxhIGtvbWJpbmFjamkgS3J5dHljem5vxZvEhyA8LT4gV3DFgnl3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQWxva2FjamEgcHJpb3J5dGV0dSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltYWxueSBjemFzIG1pxJlkenkgemRhcnplbmlhbWknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcnl0eWN6bm/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICdTTEEtSW5mbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdPc3RhdG5pYSB6bWlhbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnT3N0YXRuaW8gem1pZW5pb25lIHByemV6JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2plIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnUG/FgsSFY3pvbmUgdXPFgnVnaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdVc8WCdWdhLUluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVhbG55IHN0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnUG/FgsSFY3pvbmUgU0xBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgbyB1c8WCdWR6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWFsbnkgc3Rhbic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnWmFyesSFZHphaiBtYWNpZXJ6xIUgcHJpb3J5dGV0w7N3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdTemVyb2tvxZvEhyBvYnN6YXLDs3cgdGVrc3Rvd3ljaCBJVFNNLic7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrIEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRGVwZW5kZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmnDp28gYSBVc3XDoXJpbyBGaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udCBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYcOnw7VlcyBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVjdXBlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzaXRhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1RheGEgZGUgUmVzb2x1w6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRlIFJlc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfDgXJlYSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyZWluYW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYcOnw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBjb20gVGVyY2Vpcm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdhdHJpYnVpw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0NyaXRpY2FsaWRhZGUgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0dlcmVuY2lhciBhIHByaW9yaWRhZGUgcmVzdWx0YW50ZSBkYSBjb21iaW5hw6fDo28gQ3JpdGljYWxpZGFkZSA8LT4gSW1wYWN0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0F0cmlidWnDp8OjbyBkZSBwcmlvcmlkYWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcG8gTcOtbmltbyBlbnRyZSBJbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljYWxpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnSW5mb3JtYcOnw6NvIGRvIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgYWx0ZXJhw6fDo28gcG9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2acOnb3MgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdJbmZvcm1hw6fDo28gZGUgc2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBBc3NvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluSVRTTUNJUEFsbG9jYXRlIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEEgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFQcmludCBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBWm9vbSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlUHJpbnQgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0dlcmVuY2lhciBtYXRyaXogZGUgcHJpb3JpZGFkZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgdm9sdGFyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgdm9sdGFyIG5vIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgaW1wcmltaXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgaW1wcmltaXIgbm8gbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBhc3NvY2lhciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6JtZXRyb3MgcGFyYSBvcyBlc3RhZG9zIGRlIGluY2lkZW50ZSBuYSB2aXPDo28gZGUgcHJlZmVyw6puY2lhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnQ29uZmlndXJhIG8gdGlwbyBlIGEgZGlyZcOnw6NvIGRlIGxpbmtzIHVzYWRvcyBwYXJhIGNhbGN1bGFyIG8gZXN0YWRvIGRlIGluY2lkZW50ZS4gQSBjaGF2ZSDDqSBvIG5vbWUgZG8gdGlwbyBkZSBsaW5rIChjb21vIGRlZmluaWRvIGVtIExpbmtPYmplY3Q6OlR5cGUpIGUgbyB2YWxvciDDqSBhIGRpcmXDp8OjbyBkbyBJbmNpZGVudExpbmtUeXBlIHF1ZSBkZXZlIHNlciBzZWd1aWRvIHBhcmEgY2FsY3VsYXIgbyBlc3RhZG8gZGUgaW5jaWRlbnRlLiBQb3IgZXhlbXBsbywgc2UgbyBJbmNpZGVudExpbmtUeXBlIMOpIGNvbmZpZ3VyYWRvIHBhcmEgXCdEZXBlbmRlIGRlXCcgZSBhIERpcmXDp8OjbyDDqSBcJ09yaWdlbVwnLCBhcGVuYXMgbGlua3MgXCdEZXBlbmRlIGRlXCcgc2Vyw6NvIHNlZ3VpZG9zIChlIG7Do28gbyBsaW5rIG9wb3N0byBcJ1JlcXVlcmlkbyBwb3JcJykgcGFyYSBjYWxjdWxhciBvIGVzdGFkbyBkZSBpbmNpZGVudGUuIFZvY8OqIHBvZGUgYWRpY2lvbmFyIG1haXMgZGUgdW0gdGlwbyBkZSBsaW5rIGUgZGlyZcOnw7Vlcy4gRXguIFwnSW5jbHVpXCcgY29tIGEgZGlyZcOnw6NvIFwnRGVzdGlub1wnLiBUb2RvcyBvcyB0aXBvcyBkZSBsaW5rcyBkZWZpbmlkb3MgbmFzIG9ww6fDtWVzIExpbmtPYmplY3Q6OlR5cGUgZG8gc3lzY29uZmlnIHPDo28gcG9zc8OtdmVpcyBlIGEgZGlyZcOnw6NvIHBvZGUgc2VyIFwnT3JpZ2VtXCcsIFwnRGVzdGlub1wnIG91IFwnQW1ib3NcJy4gSU1QT1JUQU5URTogQVDDk1MgVk9Dw4ogRkFaRVIgTVVEQU7Dh0FTIE5FU1RBIE9Qw4fDg08gU1lTQ09ORklHLCDDiSBORUNFU1PDgVJJTyBFWEVDVVRBUiBPIFNDUklQVCBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBERSBGT1JNQSBRVUUgVE9ET1MgT1MgRVNUQURPUyBERSBJTkNJREVOVEVTIFNFSkFNIFJFQ0FMQ1VMQURPUyBDT00gQkFTRSBOQVMgTk9WQVMgQ09ORklHVVJBw4fDlUVTISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ011ZGFuw6dhSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdDb25lY3RhZG8gYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnSW5jbHVpXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUGFpRmlsaG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQWx0ZXJuYXRpdmEgYVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0NvbmVjdGFkbyBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0RlcGVuZGUgZGVcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdJbmNsdWlcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ1JlbGV2YW50ZSBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTsO6bWVybyBkZSBjYXJhY3RlcmVzIHBvciBsaW5oYSBlbSDDoXJlYXMgZGUgdGV4dG8gSVRTTS4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsQW50aWd1aWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnTGlnYWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpw6dvIGEgdXRpbGl6YWRvciBmaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYcOnw7VlcyBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVjdXBlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzaXRhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1RheGEgZGUgUmVzb2x1w6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRlIFJlc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfDgXJlYSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ0Zvcm1hw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGNvbSBUZXJjZWlyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2F0cmlidWnDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZGUgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0dlcmlyIGEgUHJpb3JpZGFkZSByZXN1bHRhbnRlIGRhIGNvbWJpbmHDp8OjbyBDcml0aWNpZGFkZSA8LT4gSW1wYWN0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0F0cmlidWnDp8OjbyBkZSBQcmlvcmlkYWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcG8gTcOtbmltbyBlbnRyZSBJbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ0luZm9ybWHDp8OjbyBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBhbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvIHBvcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmnDp29zIEFzc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnSW5mb3JtYcOnw6NvIGRlIHNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwgZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgc2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluSVRTTUNJUEFsbG9jYXRlIG5hIMOhcmVhIGRlIGdlc3TDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBIHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2UgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VyaXIgYSBtYXRyaXogZGUgUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayB2b2x0YXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayB2b2x0YXIgbm8gbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBpbXByaW1pciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBpbXByaW1pciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGFzc29jaWFyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXLDom1ldHJvcyBwYXJhIG9zIGVzdGFkb3MgZGUgaW5jaWRlbnRlIG5hcyBwcmVmZXLDqm5jaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdNdWRhbsOnYUlUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdMaWdhZG8gYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0luY2x1aVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQWx0ZXJuYXRpdmEgYVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnTGlnYWRvIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdEZXBlbmRlIGRlXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdJbmNsdWlcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnUmVsZXZhbnRlIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ07Dum1lcm8gZGUgY2FyYWN0ZXJlcyBwb3IgbGluaGEgZW0gw6FyZWFzIGRlIHRleHRvIElUU00uJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JfQsNC80LXQvdCwINC00LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfQlNC+0YHRgtGD0L/QvdC+0YHRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn0KHQtdGA0LLQtdGA0L3QsNGPINGH0LDRgdGC0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn0KHQstGP0LfQsNC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC40YIg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn0JrQvtC90LXRh9C90YvQuSDRgdC10YDQstC40YEg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9Ce0YjQuNCx0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfQmNC90YLQtdGA0YTQtdC50YHQvdCw0Y8g0YfQsNGB0YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0JjQoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9Ct0LrRgdC/0LvRg9Cw0YLQsNGG0LjRjyDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9CS0LvQuNGP0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQsNC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9Cn0LDRgdGC0Ywg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn0J/Qu9Cw0L3QuNGA0L7QstCw0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfQktGA0LXQvNGPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfQntGC0L3QvtGB0LjRgtGB0Y8g0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn0KHQvtGB0YLQsNCy0LvQtdC90LjQtSDQvtGC0YfQtdGC0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8g0LTQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9Ce0YLQvdC+0YHQuNGC0LXQu9GM0L3QsNGPINGB0LrQvtGA0L7RgdGC0Ywg0YDQtdGI0LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ9CS0YDQtdC80Y8g0YDQtdCw0LrRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAn0KHQv9C40YHQvtC6IFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn0KHQv9C40YHQvtC6INGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn0J7QsdC30L7RgCDRgdC10YDQstC40YHQvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn0J7QsdGD0YfQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfQpNC40L3QsNC90YHQvtCy0YvQtSDQvtC/0LXRgNCw0YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9Ca0L7QvdGC0YDQsNC60YIg0L/QvtC00LTQtdGA0LbQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfQndCw0LfQvdCw0YfQtdC90LjQtSDQv9GA0LjQvtGA0LjRgtC10YLQvtCyICc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YLRjCA8LT4g0JLQu9C40Y/QvdC40LUgPC0+INCf0YDQuNC+0YDQuNGC0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAn0JjQt9C80LXQvdC10L3QuNC1INGC0LDQsdC70LjRhtGLINGA0LDRgdGH0LXRgtCwINC/0YDQuNC+0YDQuNGC0LXRgtCwINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDQutC+0LzQsdC40L3QsNGG0LjQuCDQmtGA0LjRgtC40YfQvdC+0YHRgtGMIDwtPiDQktC70LjRj9C90LjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ9Cd0LDQt9C90LDRh9C10L3QuNC1INC/0YDQuNC+0YDQuNGC0LXRgtCwJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQstGA0LXQvNGPINC80LXQttC00YMg0LjQvdGG0LjQtNC10L3RgtCw0LzQuCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ9Ca0YDQuNGC0LjRh9C90L7RgdGC0YwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC+0LEgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9CU0LDRgtCwINC40LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQmtC10Lwg0LjQt9C80LXQvdC10L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ9Ch0LLRj9C30LDQvdC90YvQtSDRgdC10YDQstC40YHRiyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICfQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQodC10YDQstC40YHQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfQodCy0Y/Qt9Cw0L3QvdGL0LUgU0xBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC+INCh0LXRgNCy0LjRgdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQv9Cw0YDQsNC80LXRgtGA0L7QsiBBZG1pbklUU01DSVBBbGxvY2F0ZSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNMQSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU0xBUHJpbnQg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU0xBWm9vbSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU2VydmljZVByaW50INCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlWm9vbSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQvNCw0YLRgNC40YbQtdC5INC/0YDQuNC+0YDQuNGC0LXRgtC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4g0KHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyDQodCy0Y/Qt9Cw0YLRjC9MaW5rINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwINCyIHByZWZlcmVuY2Ugdmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGC0LjQvyDQuCDQvdCw0L/RgNCw0LLQu9C10L3QuNC1INGB0LLRj9C30Lgg0LTQu9GPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINC/0YDQuCDQstGL0YfQuNGB0LvQtdC90LjQuCDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwLiDQmtC70Y7RhyDRjdGC0L4g0LjQvNGPINGC0LjQv9CwINGB0LLRj9C30LggKNC60LDQuiDRjdGC0L4g0LfQsNC00LDQvdC+INCyIExpbmtPYmplY3Q6OlR5cGUpLCDQsCDQl9C90LDRh9C10L3QuNC1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QuNC1IEluY2lkZW50TGlua1R5cGUg0L3QsCDQvtGB0L3QvtCy0LDQvdC40Lgg0LrQvtGC0L7RgNC+0LPQviDQstGL0YfQuNGB0LvRj9C10YLRgdGPINGB0L7RgdGC0L7Rj9C90LjQtSDQuNC90YbQuNC00LXQvdGC0LAuINCd0LDQv9GA0LjQvNC10YAsINC10YHQu9C4IEluY2lkZW50TGlua1R5cGUg0YPRgdGC0LDQvdC+0LLQu9C10L0g0LIgXCdEZXBlbmRzT25cJywg0Lgg0J3QsNC/0YDQsNCy0LvQtdC90LjQtSAtIFwnU291cmNlXCcsINGC0L4g0YLQvtC70YzQutC+INGB0LLRj9C30LggXCdEZXBlbmRzIG9uXCcg0LHRg9C00YPRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPICjQsCDQvdC1INC/0YDQvtGC0LjQstC+0L/QvtC70L7QttC90LDRjyBcJ1JlcXVpcmVkIGZvclwnKSDQtNC70Y8g0LLRi9GH0LjRgdC70LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC40L3RhtC40LTQtdC90YLQsC4g0JLRiyDQvNC+0LbQtdGC0LUg0LTQvtCx0LDQstC40YLRjCDQtNGA0YPQs9C40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgtC40L/RiyDRgdCy0Y/Qt9C4INC4INC90LDQv9GA0LDQstC70LXQvdC40Y8g0L/QviDRgdCy0L7QtdC80YMg0LbQtdC70LDQvdC40Y4sINC90LDQv9GA0LjQvNC10YAsICBcJ0luY2x1ZGVzXCcg0YEg0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC8IFwnVGFyZ2V0XCcuINC00L7Qv9GD0YHQutCw0Y7RgtGB0Y8g0LLRgdC1INGC0LjQv9GLINGB0LLRj9C30LgsINC30LDQtNCw0L3QvdGL0LUg0L/QsNGA0LDQvNC10YLRgNC+0LwgTGlua09iamVjdDo6VHlwZSDQuCDQvdCw0L/RgNCw0LLQu9C10L3QuNGPINC80L7Qs9GD0YIg0LHRi9GC0YwgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywg0LjQu9C4IFwnQm90aFwnLiDQktCQ0JbQndCeOiDQn9Ce0KHQm9CVINCY0JfQnNCV0J3QldCd0JjQryDQl9Cd0JDQp9CV0J3QmNCZINCt0KLQntCT0J4g0J/QkNCg0JDQnNCV0KLQoNCQ0J3QldCe0JHQpdCe0JTQmNCc0J4g0JLQq9Cf0J7Qm9Cd0JjQotCsINCh0JrQoNCY0J/QoiBiaW4vb3Rycy5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCDQlNCb0K8g0J/QldCg0JXQoNCQ0KHQp9CV0KLQkCDQktCh0JXQpSDQodCe0KHQotCe0K/QndCY0Jkg0JjQndCm0JjQlNCV0J3QotCQINCd0JAg0J7QodCd0J7QktCVINCd0J7QktCr0KUg0JfQndCQ0KfQldCd0JjQmSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ2hhbmdlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUGFyZW50Q2hpbGRcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQ29ubmVjdGVkVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnSW5jbHVkZXNcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdTZXJ2aWNlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdTZXJ2aWNlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1BhcmVudENoaWxkXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnU2VydmljZVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0Nvbm5lY3RlZFRvXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnSW5jbHVkZXNcJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ9Co0LjRgNC40L3QsCBJVFNNINC/0L7Qu9GPINGC0LjQv9CwIHRleHRhcmVhJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9zd19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN3X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQmFkYWxhIHlhICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdVcGF0aWthbmFqaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ01hemluZ2lyYSB5YSBueXVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdJbWV1bmdhbmlzaHdhIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdIYWxpIHlhIHNhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ01hb255ZXNobyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnSW5hdGVnZW1lYW5hIG5hICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnSHVkdW1hIHlhIG10dW1pYWppIHdhIG13aWhzbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdNYWtvc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnTWF6aW5naXJhIHlhIG1iZWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdVc2ltYW1pemkgd2EgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdVZW5kZXNoYWppIHdhIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ01hZGhhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdIYWxpIHlhIHR1a2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5haHVzaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0VuZ2luZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnU2VoZW11IHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdNcmFkaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnTXVkYSB3YSBrdXBvbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdIdXNpYW5hIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1VhcmlmdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdJbmFoaXRhamlrYSBrd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnS2l3YW5nbyBjaGEgbXVvbmVrYW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdNdWRhIHdhIG1hamlidSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdNYXJlamVvIHlhIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnTWFyZWplbyB5YSBodWR1bWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnRW5lbyBsYSBodWR1bWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdNYWZ1bnpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ01pYW1hbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnTWthdGFiYSB3YSBrdWltYXJpc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICdVZ2F3YWppJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdVbXVoaW11IDwtPiBNYWRoYXJhIDwtPiBLaXBhdW1iZWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdTaW1hbWlhIG1hdG9rZW8geWEga2lwYXVtYmVsZSB5YSBrdXVuZ2FuaXNoYSBVbXVoaW11ICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnS3V3ZWthIGtpcGF1bWJlbGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdLaW1hIGNoYSBjaGluaSBjaGEgbXVkYSBrYXRpIHlhIG1hdHVraW8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVbXVoaW11JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICdUYWFyaWZhIHphIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdNd2lzaG8ga3ViYWRpbGlzaHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ013c2hvIGt1YmFkaWxpc2h3YSBuYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnVGFhcmlmYSB6YSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ0h1ZHVtYSB6aW5hem9odXNpa2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnVGFhcmlmYSB6YSBodWR1bWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0hhbGkgeWEgdHVraW8gbGEgc2FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEEgemluYXpvaHVzaWthJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1RhYXJpZmEgemEgaHVkdW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdIYWxpIHlhIHR1a2lvIGxhIHNhc2EnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHphIG1hemluZ2lyYSB5YSBtYmVsZSBrd2EgdXNhbmlkaSB3YSBBZG1pbklUU01DSVBBbGxvY2F0ZSBrYXRpa2EgZW5lbyBsYSBraW9uZ296aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIElUU01TTEEgY2hhIHdha2FsYSAga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSAgdWNoYXBpc2h3YWppIGNoYSBJVFNNU0xBIGNoYSB3YWthbGEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXNhamlsaSB3YSBtb2R1bGkgeWEgbWF6aW5naXJhIHlhIG1iZWxlIGt3YSBraXBlbmdlZSBjaGEga3VrdXp3YSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGh1ZHVtYSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGt1Y2hhcGlzaHdhIGt3YSBodWR1bWEgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGt1a3V6d2Ega3dhIGh1ZHVtYSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdTaW1hbWlhIG1hdHJpa2kgeWEga2lwYXVtYmVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga3VydWRpIG55dW1hIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga3VydWRpIG55dW1hIGthdGlrYSBtZW55dSB5YSBzbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdWNoYXBpc2hhIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTW9kdWxpIHlhIGt1b255ZXNoYSBraXVuZ28gY2hhIGt1Y2hhcGlzaGEga2F0aWthIG1lbnl1IHlhIHNsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWxpIHlhIGt1b255ZXNoYSBraXVuZ28gY2hhIGtpdW5nbyBrYXRpa2EgbWVueXUgeWEgaHVkdW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnVmlnZXpvIHlhIGhhbGkgeWEgbWF0dWtpbyBrYXRpa2EgbWFuZGhhcmkgeWEgbWFwZW5kZWxlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnV2VrYSBhaW5hIG5hIG13ZWxla2VvIHdhIHZpdW5nbyB2aXRha2F2eW90dW1pa2Ega3V0YWZ1dGEgaGFsaSB5YSB0dWtpby4gRnVuZ3VvIG5pIGppbmEgbGEgYWluYSB5YSBraXVuZ28gKGthbWEgaWxpdnlvZmFmYW51bGl3YSBrYXRpa2EgS2lwZW5nZWUgY2hhIEtpdW5nbzo6IEFpbmEpLCBuYSB0aGFtYW5pIG5pIG13ZWxla28gd2EgQWluYSB5YSBraXVuZ28gY2hhIHR1a2lvIGFtYmFjaG8ga2lmYXR3ZSBpbGkga3V0YWZ1dGEgaGFsaSB5YSB0dWtpby4gS3dhIG1mYW5vIGthbWEgQWluYSB5YSBraXVuZ28geWEgdHVraW8gaW1ld2Vrd2Ega3dlbnllIFwnSW5hdGVnZW1lYW5hIG5hXCcsIG5hIG13ZWxla2VvIG5pIFwnQ2hhbnpvXCcsIHZpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnIHR1IHZpdGFmd2F0YSAobmEgc2lvIGtpdW5nbyBjaGEgdG9mYXV0aSBcJ0luYWhpdGFqaWthIGt3YVwnKWt1dGFmdXRhIGhhbGlpIHlhIHR1a2lvLiBVbmF3ZXphIGt1b25nZXphIHphaWRpIGFpbmEgbmEgbWllbGVrZW8ga2FtYSB1cGVuZGF2eW8gbWZhbm8gXCdJbmFodXNpc2hhXCcgbmEgbXdlbGVrZW8gXCdMZW5nb1wnLiBWaXVuZ28gdnlvdGUgdmlsaXZ5b2ZhZmFudWxpd2Ega2F0aWthIGNoYWd1byBsYSBtZnVtbyBsYSB1c2FuaWRpIEtpcGVuZ2VlS2l1bmdvOjpBaW5hIHZpbmF3ZXpla2FuYSBuYSBtd2VsZWtlbyB1bmF3ZXphIGt1d2EgXCdDaGFuem9cJyAsIFwnTGVuZ29cJyBhdSBcJ1lvdGVcJy4gTVVISU1VOiBCQUFEQSBZQSBLVUZBTllBIE1BQkFESUxJS08gS0FUSUtBIENIQUdVTyBISUxJIExBIFVTQU5JREkgTUZVTU8gIFVOQUhJVEFKSSBLVVdBU0hBIE1BQU5ESUtPIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIElMSSBIQUxJIFlBIE1BVFVLSU8gWU9URSBZQVdFWkUgS1VUQUZVVFdBIEtVVEVHRU1FQU5BIE5BIE1JUEFOR0lMSU8gTUlQWUEhICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdCYWRpbGlrbyBsYSBJVFNNXCcga2lud2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdLYXdhaWRhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnTWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnTWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnTWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5haHVzaWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdCYWRhbGEgeWFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ0h1ZHVtYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSHVzaWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ1Rpa2V0aVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdGVnZW1lYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ1Rpa2V0aVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSHVzaWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyAga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdCYWRhbGEgeWFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXVuZ2FuaXNod2EgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyAga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0h1c2lzaGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSHVzaWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ01wYW5naWxpbyB3YSBrYXppIHdhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ01wYW5naWxpbyB3YSBrYXppIHdhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ01wYW5naWxpbyB3YSBrYXppIHdhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0h1ZHVtYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdGVnZW1lYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdNcGFuZ2lsaW8gd2Ega2F6aSB3YSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdLYXdhaWRhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0h1ZHVtYVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdLYXdhaWRhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ01hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnSHVzaWFuYSBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdNaXBhbmdpbGlvIGhpaSBpbmFmYWZhbnVhIGFpbmEgeWEga2l1bmdvIFwnQmFkYWxhIHlhXCcuIEthbWEgamluYSBsYSBjaGFuem8gbmEgamluYSBsZW5nd2EgeWFuYSB0aGFtYW5pIG1vamEsIGtpdW5nbyBraW5hY2hvdG9rYW5hIG5pIGhha2luYSB1ZWxla2VvLiBLYW1hIHRoYW1hbmkgbmkgdG9mYXV0aSwga2l1bmdvIGtpbGljaG90b2tlYSBraW5hIHVlbGVrZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdNaXBhbmdpbGlvIGhpaSBpbmFmYWZhbnVhIGFpbmEgeWEga2l1bmdvIFwnSW1ldW5nYW5pc2h3YSBuYVwnLiBLYW1hIGppbmEgbGEgY2hhbnpvIG5hIGppbmEgbGVuZ3dhIHlhbmEgdGhhbWFuaSBtb2phLCBraXVuZ28ga2luYWNob3Rva2FuYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbmFjaG90b2thbmEgbmkgaGFraW5hIHVlbGVrZW8uIEthbWEgdGhhbWFuaSBuaSB0b2ZhdXRpLCBraXVuZ28ga2lsaWNob3Rva2VhIGtpbmEgdWVsZWtlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdJbmFodXNpc2hhXCcuIEthbWEgamluYSBsYSBjaGFuem8gbmEgamluYSBsZW5nd2EgeWFuYSB0aGFtYW5pIG1vamEsIGtpdW5nbyBraWxpY2hvdG9rZWEgbmkgaGFraW5hIHVlbGVrZW8uIEthbWEgdGhhbWFuaSBuaSB0b2ZhdXRpLCBraXVuZ28ga2lsaWNob3Rva2VhIGtpbmEgdWVsZWtlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0h1c2lhbmEgbmFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbGljaG90b2tlYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdVcGFuYSB3YSBlbmVvIGxhIG1hdGluaSBsYSBJVFNNICc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9DTl9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5Y+v5L6b6YCJ5oupJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ+WPr+eUqOaApyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+WQjuerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfov57mjqUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ+W9k+WJjeeKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn5ryU56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfkvp3otZYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+acgOe7iOeUqOaIt+acjeWKoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfplJnor68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn5YmN56uvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU6L+Q6JClJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9seWTjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ+WMheaLrCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+WFtuWugyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn5bGe5LqOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfpobnnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+aBouWkjeaXtumXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+ebuOWFsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfmiqXlkYonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn6ZyA6KaBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+WGs+eOhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn5ZON5bqU5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQeamgui/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn5pyN5Yqh5qaC6L+wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+acjeWKoeWMuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ+WfueiurSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfkuqTmmJMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn5L6d5o2u5ZCI5ZCMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ+mHjeimgSA8LT4g5b2x5ZONIDwtPiDkvJjlhYjnuqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyLph43opoEgPC0+IOW9seWTjSLkuYvpl7TnmoTnu4TlkIjlhrPlrprkvJjlhYjnuqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ+S8mOWFiOe6p+WIhumFjSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ+aVhemanOmXtOacgOefreaXtumXtCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ+mHjeimgSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnU0xB5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ+S4iuasoeS/ruaUueS6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfkuIrmrKHkv67mlLnkuronOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn5YWz6IGU55qE5pyN5YqhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJ+acjeWKoeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+WFs+iBlOeahFNMQXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn5pyN5Yqh5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICflvZPliY3mlYXpmpznirbmgIEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+euoeeQhuS8mOWFiOe6p+efqemYtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9UV19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX1RXX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5Y+v5L6b6YG45pOHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ+WPr+eUqOaApyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+W+jOerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfpgKPmjqUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ+eVtuWJjeeLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn5ryU56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfkvp3os7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+acgOe1gueUqOaItuacjeWLmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfpjK/oqqQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn5YmN56uvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU6YGL54efJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9semfvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ+WMheaLrCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+WFtuWugyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn5bGs5pa8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfpoIXnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+aBouW+qeaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+ebuOmXnCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfloLHlkYonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn6ZyA6KaBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+axuueOhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn6Z+/5oeJ5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQeamgui/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn5pyN5YuZ5qaC6L+wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+acjeWLmeWNgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ+Wfueiokyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfkuqTmmJMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn5L6d5pOa5ZCI5ZCMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ+mHjeimgSA8LT4g5b2x6Z+/IDwtPiDlhKrlhYjntJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyLph43opoEgPC0+IOW9semfvyLkuYvplpPnmoTntYTlkIjmsbrlrprlhKrlhYjntJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ+WEquWFiOe0muWIhumFjSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ+aVhemanOmWk+acgOefreaZgumWkyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ+mHjeimgSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ+S4iuasoeS/ruaUueaWvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfkuIrmrKHkv67mlLnkuronOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn6Zec6IGv55qE5pyN5YuZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn55W25YmN5pWF6Zqc54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+mXnOiBr+eahFNMQXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn5pyN5YuZ5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfnlbbliY3mlYXpmpzni4DmhYsnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+euoeeQhuWEquWFiOe0muefqemZoyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBTQ1JJUFQgYmluL290cnMuSVRTTUNvbmZpZ0l0ZW1JbmNpZGVudFN0YXRlUmVjYWxjdWxhdGUucGwgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWRtaW4gZnJvbnRlbmQgb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5JVFNNQ0lQQWxsb2NhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgICAgICBJVFNNSW1wYWN0ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKCiAgICAjIHNldCB0aGUgaW1wYWN0IGxpc3QKICAgICRTZWxmLT57SW1wYWN0TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUltcGFjdH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIHByaW9yaXR5IGxpc3QKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDSVBBbGxvY2F0ZScgKSB7CgogICAgICAgICMgZ2V0IGFsbCBQcmlvcml0eUlEcyBvZiB0aGUgbWF0cml4CiAgICAgICAgbXkgJEFsbG9jYXRlRGF0YTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0ltcGFjdExpc3R9IH0gKSB7CgogICAgICAgICAgICBDUklUSUNBTElUWToKICAgICAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIGZpZWxkIG5hbWUgZm9yIHByaW9yaXR5IGlkCiAgICAgICAgICAgICAgICBteSAkRmllbGROYW1lID0gIlByaW9yaXR5SUQiIC4gJEltcGFjdCAuICctJyAuICRDcml0aWNhbGl0eTsKCiAgICAgICAgICAgICAgICAjIGNsZWFuIHVwIGFsbCB3aGl0ZXNwYWNlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbGxvd2VkIGluIEhUTUwgSUQtQXR0cmlidXRlcwogICAgICAgICAgICAgICAgJEZpZWxkTmFtZSA9fiBzeyBccysgfXt9Z3htczsKCiAgICAgICAgICAgICAgICAjIGdldCBmb3JtIHBhcmFtIGZvciBwcmlvcml0eSBpZAogICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgUGFyYW0gPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICkgfHwgJyc7CgogICAgICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJFByaW9yaXR5SUQ7CgogICAgICAgICAgICAgICAgJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBhbGxvY2F0aW9ucwogICAgICAgICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICAgICAgQWxsb2NhdGVEYXRhID0+ICRBbGxvY2F0ZURhdGEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgYWxsb2NhdGlvbiBkYXRhCiAgICAgICAgbXkgJEFsbG9jYXRlRGF0YSA9ICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRBbGxvY2F0ZU1hdHJpeDsKICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WzBdLT57T2JqZWN0VHlwZX0gPQogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnSW1wYWN0JykgLiAnIC8gJwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcml0aWNhbGl0eScpOwogICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bMF0tPntDbGFzc30gPSAnSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24nOwoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChJbXBhY3QpCiAgICAgICAgbXkgJENvdW50ZXIxID0gMTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VsZi0+e0ltcGFjdExpc3R9LT57JGF9IGNtcCAkU2VsZi0+e0ltcGFjdExpc3R9LT57JGJ9IH0KICAgICAgICAgICAga2V5cyAleyAkU2VsZi0+e0ltcGFjdExpc3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0VHlwZX0gICA9ICdJbXBhY3QnOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntJbXBhY3RLZXl9ICAgID0gJEltcGFjdDsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0T3B0aW9ufSA9ICRTZWxmLT57SW1wYWN0TGlzdH0tPnskSW1wYWN0fTsKICAgICAgICAgICAgJENvdW50ZXIxKys7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChDcml0aWNhbGl0eSkKICAgICAgICBteSAkQ291bnRlcjIgPSAxOwogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKAogICAgICAgICAgICBzb3J0IHsgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LT57JGF9IGNtcCAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdFR5cGV9ICAgICA9ICdDcml0aWNhbGl0eSc7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e0NyaXRpY2FsaXR5S2V5fSA9ICRDcml0aWNhbGl0eTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57T2JqZWN0T3B0aW9ufSAgID0gJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LT57JENyaXRpY2FsaXR5fTsKICAgICAgICAgICAgJENvdW50ZXIyKys7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIGNvbnRlbnQKICAgICAgICBmb3IgbXkgJFJvdyAoIDEgLi4gKCAkQ291bnRlcjEgLSAxICkgKSB7CiAgICAgICAgICAgIGZvciBteSAkQ29sdW1uICggMSAuLiAoICRDb3VudGVyMiAtIDEgKSApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3Qga2V5cwogICAgICAgICAgICAgICAgbXkgJEltcGFjdEtleSAgICAgID0gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlswXS0+e0ltcGFjdEtleX07CiAgICAgICAgICAgICAgICBteSAkQ3JpdGljYWxpdHlLZXkgPSAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb2x1bW5dLT57Q3JpdGljYWxpdHlLZXl9OwoKICAgICAgICAgICAgICAgICMgYnVpbGQgZmllbGQgbmFtZSBmb3IgcHJpb3JpdHkgaWQKICAgICAgICAgICAgICAgIG15ICRGaWVsZE5hbWUgPSAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0S2V5IC4gJy0nIC4gJENyaXRpY2FsaXR5S2V5OwoKICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgYWxsIHdoaXRlc3BhY2VzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsbG93ZWQgaW4gSFRNTCBJRC1BdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAkRmllbGROYW1lID1+IHN7IFxzKyB9e31neG1zOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIG9wdGlvbiBzdHJpbmcKICAgICAgICAgICAgICAgIG15ICRPcHRpb25TdHJnID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0S2V5fS0+eyRDcml0aWNhbGl0eUtleX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLT57T3B0aW9uU3RyZ30gPSAkT3B0aW9uU3RyZzsKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntDbGFzc30gICAgICA9ICdDb250ZW50JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRSb3cgKCAwIC4uICQjeyRBbGxvY2F0ZU1hdHJpeH0gKSB7CgogICAgICAgICAgICBpZiAoICRSb3cgIT0gMCApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1JvdycgKQogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoIDAgLi4gJCN7ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddIH0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgcm93IGlzIGhlYWRlcgogICAgICAgICAgICAgICAgaWYgKCAkUm93ID09IDAgKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICggJENvbHVtbiA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0Rlc2NyaXB0aW9uQ2VsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGVudENlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNQ0lQQWxsb2NhdGUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluU2VydmljZS5wbSAtIGFkbWluIGZyb250ZW5kIHRvIG1hbmFnZSBzZXJ2aWNlcwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8xYjI2MWFkMDZmOGRlNDE5MDUxMGYyOGI4YTI2MGJkNjI2NjcwNWNjL0tlcm5lbC9Nb2R1bGVzL0FkbWluU2VydmljZS5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU2VydmljZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKIyAtLS0KIyBJVFNNCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CiMgLS0tCgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwojIC0tLQojIElUU00KIyAtLS0KICAgICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JyBdLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKIyAtLS0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNlcnZpY2UgZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlcnZpY2VFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJUdldFBhcmFtOwojIC0tLQojIElUU00KIyAtLS0KIyAgICAgICAgZm9yIChxdyhTZXJ2aWNlSUQgUGFyZW50SUQgTmFtZSBWYWxpZElEIENvbW1lbnQpKSB7CiAgICAgICAgZm9yIChxdyhTZXJ2aWNlSUQgUGFyZW50SUQgTmFtZSBWYWxpZElEIENvbW1lbnQgVHlwZUlEIENyaXRpY2FsaXR5KSkgewojIC0tLQogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgbXkgJUVycm9yOwoKICAgICAgICBpZiAoICEkR2V0UGFyYW17TmFtZX0gKSB7CiAgICAgICAgICAgICRFcnJvcnsnTmFtZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17U2VydmljZUlEfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtTZXJ2aWNlSUR9ID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUFkZCgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJFNlbGYtPntMb2dPYmplY3R9LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U2VydmljZVByZWZlcmVuY2VzR2VuZXJpYyc7CgogICAgICAgICAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJE5vdGU7CiAgICAgICAgICAgICAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTZXJ2aWNlRGF0YSA9PiBcJVNlcnZpY2VEYXRhICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBAQXJyYXkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICRQYXJhbUl0ZW0tPntOYW1lfSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkUGFyYW1JdGVtLT57TmFtZX0gfSA9IFxAQXJyYXk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgISRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5vdGUgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJE9iamVjdC0+RXJyb3IoKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkRXJyb3J7TWVzc2FnZX0KICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJEVycm9ye01lc3NhZ2V9LAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIGlzIGVuYWJsZWQgdG8gdXNlIGl0IGhlcmUKICAgICAgICBpZiAoICEkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgRGF0YSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggIlBsZWFzZSBhY3RpdmF0ZSAlcyBmaXJzdCEiLCAiU2VydmljZSIgKSwKICAgICAgICAgICAgICAgIExpbmsgPT4KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXNDb25maWc7U3ViYWN0aW9uPUVkaXQ7U3lzQ29uZmlnR3JvdXA9VGlja2V0O1N5c0NvbmZpZ1N1Ykdyb3VwPUNvcmU6OlRpY2tldCNUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VydmljZSBsaXN0CiAgICAgICAgbXkgJFNlcnZpY2VMaXN0ID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBzZXJ2aWNlcyBkZWZpbmVkLCB0aGV5IGFyZSBzaG93bgogICAgICAgIGlmICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwoKICAgICAgICAgICAgIyBzb3J0IHRoZSBzZXJ2aWNlIGxpc3QgYnkgbG9uZyBzZXJ2aWNlIG5hbWUKICAgICAgICAgICAgQHskU2VydmljZUxpc3R9ID0gc29ydCB7ICRhLT57TmFtZX0gLiAnOjonIGNtcCAkYi0+e05hbWV9IC4gJzo6JyB9IEB7JFNlcnZpY2VMaXN0fTsKCiAgICAgICAgICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJFNlcnZpY2VEYXRhLT57VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtc2cgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2VydmljZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9NYXNrTmV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZpY2VEYXRhOwoKICAgICMgZ2V0IHBhcmFtcwogICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CiAgICBpZiAoICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9IG5lICdORVcnICkgewogICAgICAgICVTZXJ2aWNlRGF0YSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkTGlzdFR5cGUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKTsKCiAgICAjIGdlbmVyYXRlIFBhcmVudE9wdGlvblN0cmcKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlcnZpY2VEYXRhe1BhcmVudE9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgICA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdQYXJlbnRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgICAgPT4gJFBhcmFte1BhcmVudElEfSB8fCAkU2VydmljZURhdGF7UGFyZW50SUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSAgID0+IDEsCiAgICAgICAgVHJlZVZpZXcgICAgICAgPT4gKCAkTGlzdFR5cGUgZXEgJ3RyZWUnICkgPyAxIDogMCwKICAgICAgICBEaXNhYmxlZEJyYW5jaCA9PiAkU2VydmljZURhdGF7TmFtZX0sCiAgICAgICAgVHJhbnNsYXRpb24gICAgPT4gMCwKICAgICk7CiMgLS0tCiMgSVRTTQojIC0tLQogICAgIyBnZW5lcmF0ZSBUeXBlT3B0aW9uU3RyZwogICAgbXkgJFR5cGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgIyBidWlsZCB0aGUgdHlwZSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe1R5cGVPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiAkVHlwZUxpc3QsCiAgICAgICAgTmFtZSA9PiAnVHlwZUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtUeXBlSUR9IHx8ICRTZXJ2aWNlRGF0YXtUeXBlSUR9LAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSBjcml0aWNhbGl0eSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5T3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NyaXRpY2FsaXR5JywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDcml0aWNhbGl0eX0gfHwgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSwKICAgICk7CiMgLS0tCgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkU2VydmljZURhdGF7VmFsaWRPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTZXJ2aWNlRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICApOwoKICAgICMgb3V0cHV0IHNlcnZpY2UgZWRpdAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVNlcnZpY2VEYXRhLCB9LAogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkU2VydmljZURhdGF7U2VydmljZUlEfSBuZSAnTkVXJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJFZGl0JywKICAgICAgICAgICAgRGF0YSA9PiB7JVNlcnZpY2VEYXRhfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyQWRkJyApOwogICAgfQoKICAgICMgc2hvdyBlYWNoIHByZWZlcmVuY2VzIHNldHRpbmcKICAgIG15ICVQcmVmZXJlbmNlcyA9ICgpOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1NlcnZpY2VQcmVmZXJlbmNlcycpIH07CiAgICB9CiAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlNlcnZpY2VQcmVmZXJlbmNlc0dlbmVyaWMnOwoKICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICk7CiAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTZXJ2aWNlRGF0YSA9PiBcJVNlcnZpY2VEYXRhICk7CiAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSXRlbScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgcmVmKCAkUGFyYW1JdGVtLT57RGF0YX0gKSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgICAgICB8fCByZWYoICRQcmVmZXJlbmNlc3skSXRlbX0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW1JdGVtLT57J09wdGlvbid9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2VydmljZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0KICAgICk7Cn0KMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluU0xBLnBtIC0gYWRtaW4gZnJvbnRlbmQgdG8gbWFuYWdlIHNsYXMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMWIyNjFhZDA2ZjhkZTQxOTA1MTBmMjhiOGEyNjBiZDYyNjY3MDVjYy9LZXJuZWwvTW9kdWxlcy9BZG1pblNMQS5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKIyAtLS0KIyBJVFNNCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CiMgLS0tCgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U0xBT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U0xBLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwojIC0tLQojIElUU00KIyAtLS0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJVBhcmFtKTsKIyAtLS0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlRXJyb3IgPSAoKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNsYSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU0xBRWRpdCcgKSB7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrTmV3KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2xhIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTTEFTYXZlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgZm9yIG15ICRQYXJhbSAoCiMgLS0tCiMgSVRTTQojIC0tLQojICAgICAgICAgICAgcXcoU0xBSUQgTmFtZSBDYWxlbmRhciBGaXJzdFJlc3BvbnNlVGltZSBGaXJzdFJlc3BvbnNlTm90aWZ5IFNvbHV0aW9uVGltZSBTb2x1dGlvbk5vdGlmeSBVcGRhdGVUaW1lIFVwZGF0ZU5vdGlmeSBWYWxpZElEIENvbW1lbnQpCiAgICAgICAgICAgIHF3KFNMQUlEIE5hbWUgQ2FsZW5kYXIgRmlyc3RSZXNwb25zZVRpbWUgRmlyc3RSZXNwb25zZU5vdGlmeSBTb2x1dGlvblRpbWUgU29sdXRpb25Ob3RpZnkgVXBkYXRlVGltZSBVcGRhdGVOb3RpZnkgVmFsaWRJRCBDb21tZW50IFR5cGVJRCBNaW5UaW1lQmV0d2VlbkluY2lkZW50cykKIyAtLS0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbSApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgICAgICAlRXJyb3IgPSAoKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17TmFtZX0gKSB7CiAgICAgICAgICAgICRFcnJvcnsnTmFtZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIGVycm9ycyBvY2N1cnJlZAogICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgaWRzCiAgICAgICAgICAgIG15IEBTZXJ2aWNlSURzID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KCBQYXJhbSA9PiAnU2VydmljZUlEcycgKTsKICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwoKICAgICAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYSBuZXcgc2xhCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U0xBSUR9ID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFBZGQoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1NMQUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgdGhlIHNsYQogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSBwcmVmZXJlbmNlcwogICAgICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUdldCgKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJEdldFBhcmFte1NMQUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICVQcmVmZXJlbmNlcyA9ICgpOwogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU0xBUHJlZmVyZW5jZXMnKSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTTEFQcmVmZXJlbmNlc0dlbmVyaWMnOwoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG15ICROb3RlOwogICAgICAgICAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU0xBRGF0YSA9PiBcJVNMQURhdGEgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15IEBBcnJheSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRQYXJhbUl0ZW0tPntOYW1lfSB9ID0gXEBBcnJheTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcmFtID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xBRGF0YSAgPT4gXCVTTEFEYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROb3RlIC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkRXJyb3J7TWVzc2FnZX0KICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJEVycm9ye01lc3NhZ2V9LAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVFcnJvciwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzbGEgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgaXMgZW5hYmxlZCB0byB1c2UgaXQgaGVyZQogICAgICAgIGlmICggISRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAiUGxlYXNlIGFjdGl2YXRlICVzIGZpcnN0ISIsICJTZXJ2aWNlIiApLAogICAgICAgICAgICAgICAgTGluayA9PgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZG1pblN5c0NvbmZpZztTdWJhY3Rpb249RWRpdDtTeXNDb25maWdHcm91cD1UaWNrZXQ7U3lzQ29uZmlnU3ViR3JvdXA9Q29yZTo6VGlja2V0I1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VMaXN0KAogICAgICAgICAgICBWYWxpZCAgICAgICAgPT4gMCwKICAgICAgICAgICAgS2VlcENoaWxkcmVuID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CgogICAgICAgICMgZ2V0IHNsYSBsaXN0CiAgICAgICAgbXkgJVNMQUxpc3QgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUxpc3QoCiAgICAgICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBTTEEncyBkZWZpbmVkLCB0aGV5IGFyZSBzaG93bgogICAgICAgIGlmICglU0xBTGlzdCkgewogICAgICAgICAgICBTTEFJRDoKICAgICAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyBsYyAkU0xBTGlzdHskYX0gY21wIGxjICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIHNsYSBkYXRhCiAgICAgICAgICAgICAgICBteSAlU0xBRGF0YSA9ICRTZWxmLT57U0xBT2JqZWN0fS0+U0xBR2V0KAogICAgICAgICAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBidWlsZCB0aGUgc2VydmljZSBsaXN0CiAgICAgICAgICAgICAgICBteSBAU2VydmljZUxpc3Q7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgICAgICAgICAgc29ydCB7IGxjICRTZXJ2aWNlTGlzdHskYX0gY21wIGxjICRTZXJ2aWNlTGlzdHskYn0gfQogICAgICAgICAgICAgICAgICAgIEB7ICRTTEFEYXRhe1NlcnZpY2VJRHN9IH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2VydmljZUxpc3QsICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfSB8fCAnLSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgbGlzdCByb3cKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VMaXN0WzBdIHx8ICctJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJFNMQURhdGF7VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IFNMQUlEIGlmIHNjYWxhciBAU2VydmljZUxpc3QgPD0gMTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB0aGUgZmlyc3Qgc2VydmljZSBpZAogICAgICAgICAgICAgICAgc2hpZnQgQFNlcnZpY2VMaXN0OwoKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZU5hbWUgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBsaXN0IHJvdwogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1zZyBpcyBkaXNwbGF5ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TTEEnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfTWFza05ldyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVTTEFEYXRhOwogICAgJFNMQURhdGF7U0xBSUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU0xBSUQnICkgfHwgJyc7CgogICAgaWYgKCAkU0xBRGF0YXtTTEFJRH0gKSB7CgogICAgICAgICMgZ2V0IHNsYSBkYXRhCiAgICAgICAgJVNMQURhdGEgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUdldCgKICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFEYXRhe1NMQUlEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNMQURhdGF7U2VydmljZUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKTsKICAgIH0KCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRMaXN0VHlwZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpOwoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgICAgICAgID0+IDEsCiAgICAgICAgS2VlcENoaWxkcmVuID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBTZXJ2aWNlT3B0aW9uU3RyZwogICAgJFBhcmFte1NlcnZpY2VPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICAgICBOYW1lICAgICAgICA9PiAnU2VydmljZUlEcycsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNMQURhdGF7U2VydmljZUlEc30gfHwgW10sCiAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICBTaXplICAgICAgICA9PiA1LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgVHJlZVZpZXcgICAgPT4gKCAkTGlzdFR5cGUgZXEgJ3RyZWUnICkgPyAxIDogMCwKICAgICAgICBNYXggICAgICAgICA9PiAyMDAsCiAgICApOwojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAjIGdlbmVyYXRlIFR5cGVPcHRpb25TdHJnCiAgICAgICAgbXkgJFR5cGVMaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICAgICApOwogICAgICAgICRQYXJhbXtUeXBlT3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhID0+ICRUeXBlTGlzdCwKICAgICAgICAgICAgTmFtZSA9PiAnVHlwZUlEJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkU0xBRGF0YXtUeXBlSUR9LAogICAgICAgICk7CiMgLS0tCgogICAgIyBnZW5lcmF0ZSBDYWxlbmRhck9wdGlvblN0cmcKICAgIG15ICVDYWxlbmRhckxpc3Q7CiAgICBmb3IgbXkgJENhbGVuZGFyTnVtYmVyICggJycsIDEgLi4gNTAgKSB7CiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGltZVZhY2F0aW9uRGF5czo6Q2FsZW5kYXIkQ2FsZW5kYXJOdW1iZXIiKSApIHsKICAgICAgICAgICAgJENhbGVuZGFyTGlzdHskQ2FsZW5kYXJOdW1iZXJ9ID0gIkNhbGVuZGFyICRDYWxlbmRhck51bWJlciAtICIKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoICJUaW1lWm9uZTo6Q2FsZW5kYXIiIC4gJENhbGVuZGFyTnVtYmVyIC4gIk5hbWUiICk7CiAgICAgICAgfQogICAgfQogICAgJFNMQURhdGF7Q2FsZW5kYXJPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlQ2FsZW5kYXJMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2FsZW5kYXInLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17Q2FsZW5kYXJ9IHx8ICRTTEFEYXRhe0NhbGVuZGFyfSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CiAgICBteSAlTm90aWZ5TGV2ZWxMaXN0ID0gKAogICAgICAgIDEwID0+ICcxMCUnLAogICAgICAgIDIwID0+ICcyMCUnLAogICAgICAgIDMwID0+ICczMCUnLAogICAgICAgIDQwID0+ICc0MCUnLAogICAgICAgIDUwID0+ICc1MCUnLAogICAgICAgIDYwID0+ICc2MCUnLAogICAgICAgIDcwID0+ICc3MCUnLAogICAgICAgIDgwID0+ICc4MCUnLAogICAgICAgIDkwID0+ICc5MCUnLAogICAgKTsKICAgICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VOb3RpZnlPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnRmlyc3RSZXNwb25zZU5vdGlmeScsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSB8fCAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CiAgICAkU0xBRGF0YXtVcGRhdGVOb3RpZnlPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVXBkYXRlTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1VwZGF0ZU5vdGlmeX0gfHwgJFNMQURhdGF7VXBkYXRlTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CiAgICAkU0xBRGF0YXtTb2x1dGlvbk5vdGlmeU9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVOb3RpZnlMZXZlbExpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdTb2x1dGlvbk5vdGlmeScsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtTb2x1dGlvbk5vdGlmeX0gfHwgJFNMQURhdGF7U29sdXRpb25Ob3RpZnl9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgKTsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRTTEFEYXRhe1ZhbGlkT3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VmFsaWRJRH0gfHwgJFNMQURhdGF7VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgKTsKCiAgICAjIG91dHB1dCBzbGEgZWRpdAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbQogICAgICAgIH0sCiAgICApOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlldycgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NMQUVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVTTEFEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvd3MgaGVhZGVyCiAgICBpZiAoICRTTEFEYXRhe1NMQUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyQWRkJyApOwogICAgfQoKICAgICMgc2hvdyBlYWNoIHByZWZlcmVuY2VzIHNldHRpbmcKICAgIG15ICVQcmVmZXJlbmNlcyA9ICgpOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU0xBUHJlZmVyZW5jZXMnKSB9OwogICAgfQogICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTTEFQcmVmZXJlbmNlc0dlbmVyaWMnOwoKICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICk7CiAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTTEFEYXRhID0+IFwlU0xBRGF0YSApOwogICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NMQUl0ZW0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIHJlZiggJFBhcmFtSXRlbS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgfHwgcmVmKCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57RGF0YX0gKSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRQcmVmZXJlbmNlc3skSXRlbX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskUGFyYW1JdGVtfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRQYXJhbUl0ZW0tPntCbG9ja30gfHwgJFByZWZlcmVuY2VzeyRJdGVtfS0+e0Jsb2NrfSB8fCAnT3B0aW9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG91dHB1dCBiYWNrCiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNMQScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0KICAgICk7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2UucG0gLSB0aGUgT1RSUyBJVFNNIFNlcnZpY2UgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50SVRTTVNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1NlcnZpY2VPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2V0IGluY2lkZW50IHNpZ25hbAogICAgbXkgJUluY2lTaWduYWxzID0gKAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICApOwoKICAgIGlmICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQogICAgICAgIEB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgogICAgICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyByb3cKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICRTZXJ2aWNlRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJFNlcnZpY2VEYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgICA9PiAnT3ZlcnZpZXcnLAogICAgICAgIFJlZnJlc2ggPT4gJFJlZnJlc2gsCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbSAtIHByaW50IGxheW91dCBmb3IgaXRzbSBzZXJ2aWNlIGFnZW50IGludGVyZmFjZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlBERjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57UERGT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NMQU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNMQS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU2VydmljZUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VydmljZUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICk7CiAgICBpZiAoICEkU2VydmljZXtTZXJ2aWNlSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjcmVhdGUgYnkpCiAgICAkU2VydmljZXtDcmVhdGVCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjaGFuZ2UgYnkpCiAgICAkU2VydmljZXtDaGFuZ2VCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBpZiAoICRTZWxmLT57UERGT2JqZWN0fSApIHsKICAgICAgICBteSAlUGFnZTsKCiAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgICAgICB9CiAgICAgICAgJFBhZ2V7TWFyZ2luVG9wfSAgICAgPSAzMDsKICAgICAgICAkUGFnZXtNYXJnaW5SaWdodH0gICA9IDQwOwogICAgICAgICRQYWdle01hcmdpbkJvdHRvbX0gID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luTGVmdH0gICAgPSA0MDsKICAgICAgICAkUGFnZXtIZWFkZXJSaWdodH0gICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTZXJ2aWNlJyk7CiAgICAgICAgJFBhZ2V7SGVhZGxpbmVMZWZ0fSAgPSAkU2VydmljZXtOYW1lU2hvcnR9OwogICAgICAgICRQYWdle0hlYWRsaW5lUmlnaHR9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ3ByaW50ZWQgYnknKSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckZ1bGxuYW1lfSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZSA9PiAnJEVudnsiVGltZSJ9JyApOwogICAgICAgICRQYWdle0Zvb3RlckxlZnR9ID0gJyc7CiAgICAgICAgJFBhZ2V7UGFnZVRleHR9ICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICRQYWdle1BhZ2VDb3VudH0gID0gMTsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgIFRpdGxlICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRTZXJ2aWNle05hbWVTaG9ydH0sCiAgICAgICAgICAgIEVuY29kZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntVc2VyQ2hhcnNldH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgZmlyc3QgcGRmIHBhZ2UKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICk7CiAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwoKICAgICAgICAjIG91dHB1dCBnZW5lcmFsIGluZm9zCiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRHZW5lcmFsSW5mb3MoCiAgICAgICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgICAgICBTZXJ2aWNlID0+IFwlU2VydmljZSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBhc3NvY2lhdGVkIHNsYXMKICAgICAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRBc3NvY2lhdGVkU0xBcygKICAgICAgICAgICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgICAgICAgICAgU0xBTGlzdCA9PiBcJVNMQUxpc3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBkZXRhaWxlZCBpbmZvcwogICAgICAgICRTZWxmLT5fUERGT3V0cHV0RGV0YWlsZWRJbmZvcygKICAgICAgICAgICAgUGFnZSAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgIFNlcnZpY2UgPT4gXCVTZXJ2aWNlLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgICAgIG15ICRGaWxlbmFtZSA9ICRTZWxmLT57TWFpbk9iamVjdH0tPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJFNlcnZpY2V7TmFtZVNob3J0fSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CiAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CgogICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2VydmljZV8nIC4gJEZpbGVuYW1lIC4gIl8kWS0kTS0kRFxfJGgtJG0ucGRmIiwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL3BkZicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnRPdXRwdXQoKSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBodG1sIG91dHB1dAogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50SGVhZGVyKCBWYWx1ZSA9PiAkU2VydmljZXtOYW1lU2hvcnR9ICk7CgogICAgICAgICMgb3V0cHV0IGFzc29jaWF0ZWQgc2xhcwogICAgICAgIGlmICgga2V5cyAlU0xBTGlzdCApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAiQXNzb2NpYXRlZFNMQXMiICk7CiAgICAgICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IGtleXMgJVNMQUxpc3QgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIkFzc29jaWF0ZWRTTEFzUm93IiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkU0xBTGlzdHskU0xBSUR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVByaW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRGb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfUERGT3V0cHV0R2VuZXJhbEluZm9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFBhZ2UgU2VydmljZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGxlZnQgdGFibGUKICAgIG15ICRUYWJsZUxlZnQgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VydmljZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntOYW1lU2hvcnR9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ3VycmVudCBJbmNpZGVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntDdXJJbmNpU3RhdGV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U2VydmljZX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0xhc3QgY2hhbmdlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgXTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSAxNzAuNTsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVszXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzRde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ICA9ICcjQUFBQUFBJzsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvck9kZH0gICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0RGV0YWlsZWRJbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNlcnZpY2UpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NlcnZpY2UnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgY3JlYXRlIHRhYmxlCiAgICBteSAkVGFibGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VydmljZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1R5cGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtTZXJ2aWNlfS0+e1R5cGV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcml0aWNhbGl0eScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1NlcnZpY2V9LT57Q3JpdGljYWxpdHl9ICksCiAgICAgICAgfSwKICAgIF07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3dzID0gQHskVGFibGV9OwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSAgICAgID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRBc3NvY2lhdGVkU0xBcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNMQUxpc3QpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgZ2VuZXJhdGUgdGFibGUgZGF0YQogICAgZm9yIG15ICRTTEFJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17U0xBTGlzdH0gfSApIHsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU0xBJykgLiAnOic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRQYXJhbXtTTEFMaXN0fS0+eyRTTEFJRH07CiAgICAgICAgJFJvdysrOwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFNlbGYtPntQREZPYmplY3R9LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdBc3NvY2lhdGVkIFNMQXMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2Vab29tLnBtIC0gdGhlIE9UUlMgSVRTTSBTZXJ2aWNlIHpvb20gbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50SVRTTVNlcnZpY2Vab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Owp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U0xBOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoQ29uZmlnT2JqZWN0IFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntMaW5rT2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NMQU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNMQS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU2VydmljZUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VydmljZUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU2VydmljZXtTZXJ2aWNlSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJ1biBjb25maWcgaXRlbSBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZWxmLT57U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IFwlU2VydmljZSwKICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIENvbmZpZyAgPT4gJE1lbnVzeyRNZW51fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc2xhIGxpc3QKICAgIG15ICVTTEFMaXN0ID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCVTTEFMaXN0KSB7CgogICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NMQScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFHZXQoCiAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVTTEEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkU2VsZi0+e0xpbmtPYmplY3R9LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgS2V5ICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGluayB0YWJsZSB2aWV3IG1vZGUKICAgIG15ICRMaW5rVGFibGVWaWV3TW9kZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICBteSAkTGlua1RhYmxlU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICApOwoKICAgICMgb3V0cHV0IHRoZSBsaW5rIHRhYmxlCiAgICBpZiAoJExpbmtUYWJsZVN0cmcpIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgKTsKCiAgICAjIGdldCBjcmVhdGUgdXNlciBkYXRhCiAgICAkU2VydmljZXtDcmVhdGVCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgJFNlcnZpY2V7Q2hhbmdlQnlOYW1lfSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4KICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQS5wbSAtIHRoZSBPVFJTIElUU00gU0xBIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U0xBT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTTEEtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCVTTEFMaXN0KSB7CiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFHZXQoCiAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJvdwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNMQSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigKICAgICAgICBUaXRsZSAgID0+ICdPdmVydmlldycsCiAgICAgICAgUmVmcmVzaCA9PiAkUmVmcmVzaCwKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU0xBJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtIC0gcHJpbnQgbGF5b3V0IGZvciBpdHNtIHNsYSBhZ2VudCBpbnRlcmZhY2UKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU0xBUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlBERjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTTEE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1BERk9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U0xBT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTTEEtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNMQUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU0xBSUQiICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTTEFJRCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gU0xBSUQgaXMgZ2l2ZW4hIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEKICAgIG15ICVTTEEgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUdldCgKICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJFNMQXtTTEFJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNMQUlEICRTTEFJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjYWxlbmRhciBuYW1lCiAgICBpZiAoICRTTEF7Q2FsZW5kYXJ9ICkgewogICAgICAgICRTTEF7Q2FsZW5kYXJOYW1lfSA9ICJDYWxlbmRhciAkU0xBe0NhbGVuZGFyfSAtICIKICAgICAgICAgICAgLiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkU0xBe0NhbGVuZGFyfSAuICJOYW1lIiApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gJ0NhbGVuZGFyIERlZmF1bHQnOwogICAgfQoKICAgICMgZ2V0IHVzZXIgZGF0YSAoY3JlYXRlIGJ5KQogICAgJFNMQXtDcmVhdGVCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTTEF7Q3JlYXRlQnl9LAogICAgKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNoYW5nZSBieSkKICAgICRTTEF7Q2hhbmdlQnlOYW1lfSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBpZiAoICRTZWxmLT57UERGT2JqZWN0fSApIHsKICAgICAgICBteSAlUGFnZTsKCiAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgICAgICB9CiAgICAgICAgJFBhZ2V7TWFyZ2luVG9wfSAgICAgPSAzMDsKICAgICAgICAkUGFnZXtNYXJnaW5SaWdodH0gICA9IDQwOwogICAgICAgICRQYWdle01hcmdpbkJvdHRvbX0gID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luTGVmdH0gICAgPSA0MDsKICAgICAgICAkUGFnZXtIZWFkZXJSaWdodH0gICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTTEEnKTsKICAgICAgICAkUGFnZXtIZWFkbGluZUxlZnR9ICA9ICRTTEF7TmFtZX07CiAgICAgICAgJFBhZ2V7SGVhZGxpbmVSaWdodH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgncHJpbnRlZCBieScpIC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRnVsbG5hbWV9IC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoIFRlbXBsYXRlID0+ICckRW52eyJUaW1lIn0nICk7CiAgICAgICAgJFBhZ2V7Rm9vdGVyTGVmdH0gPSAnJzsKICAgICAgICAkUGFnZXtQYWdlVGV4dH0gICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdQYWdlJyk7CiAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSAgPSAxOwoKICAgICAgICAjIGNyZWF0ZSBuZXcgcGRmIGRvY3VtZW50CiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE5ldygKICAgICAgICAgICAgVGl0bGUgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFNMQXtOYW1lfSwKICAgICAgICAgICAgRW5jb2RlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgKTsKICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgICAgICMgb3V0cHV0IGdlbmVyYWwgaW5mb3MKICAgICAgICAkU2VsZi0+X1BERk91dHB1dEdlbmVyYWxJbmZvcygKICAgICAgICAgICAgUGFnZSA9PiBcJVBhZ2UsCiAgICAgICAgICAgIFNMQSAgPT4gXCVTTEEsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgZGV0YWlsZWQgaW5mb3MKICAgICAgICAkU2VsZi0+X1BERk91dHB1dERldGFpbGVkSW5mb3MoCiAgICAgICAgICAgIFBhZ2UgPT4gXCVQYWdlLAogICAgICAgICAgICBTTEEgID0+IFwlU0xBLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgICAgIG15ICRGaWxlbmFtZSA9ICRTZWxmLT57TWFpbk9iamVjdH0tPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJFNMQXtOYW1lfSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CiAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CgogICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2xhXycgLiAkRmlsZW5hbWUgLiAiXyRZLSRNLSREXF8kaC0kbS5wZGYiLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE91dHB1dCgpLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdlbmVyYXRlIGh0bWwgb3V0cHV0CiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRIZWFkZXIoIFZhbHVlID0+ICRTTEF7TmFtZX0gKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNMQVByaW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU0xBLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwoKICAgICAgICAjIHJldHVybiBvdXRwdXQKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9QREZPdXRwdXRHZW5lcmFsSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NMQScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e05hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U0xBfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ3JlYXRlZCBieScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e0NoYW5nZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTTEF9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntDaGFuZ2VCeU5hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgIG15ICRSb3dzID0gQHskVGFibGVMZWZ0fTsKICAgIGlmICggQHskVGFibGVSaWdodH0gPiAkUm93cyApIHsKICAgICAgICAkUm93cyA9IEB7JFRhYmxlUmlnaHR9OwogICAgfQoKICAgIG15ICVUYWJsZVBhcmFtOwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntWYWx1ZX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0NvbnRlbnR9ICAgICAgICAgPSAnICc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0JhY2tncm91bmRDb2xvcn0gPSAnI0ZGRkZGRic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bNF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntWYWx1ZX07CiAgICB9CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDIwMC41OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMl17V2lkdGh9ID0gNDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzNde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gID0gJyNBQUFBQUEnOwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yT2RkfSAgID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dERldGFpbGVkSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NMQScpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyBjcmVhdGUgdGFibGUKICAgIG15ICRUYWJsZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTTEEnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1R5cGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtTTEF9LT57VHlwZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NhbGVuZGFyJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkUGFyYW17U0xBfS0+e0NhbGVuZGFyTmFtZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdGaXJzdCBSZXNwb25zZSBUaW1lJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1NMQX0tPntGaXJzdFJlc3BvbnNlVGltZX0gKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1VwZGF0ZSBUaW1lJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkUGFyYW17U0xBfS0+e1VwZGF0ZVRpbWV9ICkgLiAnICcKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NvbHV0aW9uIFRpbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtTTEF9LT57U29sdXRpb25UaW1lfSApCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnbWludXRlcycpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cycpCiAgICAgICAgICAgICAgICAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoCiAgICAgICAgICAgICAgICAkUGFyYW17U0xBfS0+e01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgIF07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3dzID0gQHskVGFibGV9OwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gMTIwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMzkxOwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gICAgICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0gLSB0aGUgT1RSUyBJVFNNIFNMQSB6b29tIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEFab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NMQU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNMQS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU0xBSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTTEFJRCIgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBTTEFJRCBpcyBnaXZlbiEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNsYQogICAgbXkgJVNMQSA9ICRTZWxmLT57U0xBT2JqZWN0fS0+U0xBR2V0KAogICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU0xBe1NMQUlEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiU0xBSUQgJFNMQUlEIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNhbGVuZGFyIG5hbWUKICAgIGlmICggJFNMQXtDYWxlbmRhcn0gKSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gIkNhbGVuZGFyICRTTEF7Q2FsZW5kYXJ9IC0gIgogICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRTTEF7Q2FsZW5kYXJ9IC4gIk5hbWUiICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU0xBe0NhbGVuZGFyTmFtZX0gPSAnQ2FsZW5kYXIgRGVmYXVsdCc7CiAgICB9CgogICAgIyBydW4gY29uZmlnIGl0ZW0gbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRNZW51c3skTWVudX0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU2VsZi0+e1NMQUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBTTEEgICAgID0+IFwlU0xBLAogICAgICAgICAgICAgICAgICAgIENvdW50ZXIgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRTTEF7U2VydmljZUlEc30gJiYgcmVmICRTTEF7U2VydmljZUlEc30gZXEgJ0FSUkFZJyAmJiBAeyAkU0xBe1NlcnZpY2VJRHN9IH0gKSB7CgogICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHNlcnZpY2UgbGlzdAogICAgICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRTTEF7U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICBteSAlU2VydmljZSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgdG8gaGFzaAogICAgICAgICAgICAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2U7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgICAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICAgICApOwoKICAgICAgICBteSAkQ3NzQ2xhc3MgPSAnJzsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VydmljZUxpc3R7JGF9LT57TmFtZX0gY21wICRTZXJ2aWNlTGlzdHskYn0tPntOYW1lfSB9CiAgICAgICAgICAgIGtleXMgJVNlcnZpY2VMaXN0CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIHNldCBvdXRwdXQgb2JqZWN0CiAgICAgICAgICAgICRDc3NDbGFzcyA9ICRDc3NDbGFzcyBlcSAnc2VhcmNocGFzc2l2ZScgPyAnc2VhcmNoYWN0aXZlJyA6ICdzZWFyY2hwYXNzaXZlJzsKCiAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZVJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9LT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICBDc3NDbGFzcyAgICAgID0+ICRDc3NDbGFzcywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNyZWF0ZSB1c2VyIGRhdGEKICAgICRTTEF7Q3JlYXRlQnlOYW1lfSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgJFNMQXtDaGFuZ2VCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTTEF7Q2hhbmdlQnl9LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNMQVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNMQSwKICAgICAgICB9LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNU2VydmljZU1lbnVHZW5lcmljLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFNlcnZpY2VPYmplY3QgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2UhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1JvID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfS0+e0dyb3VwUm99CiAgICAgICAgfHwgW107CiAgICBteSAkR3JvdXBzUncgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXB9CiAgICAgICAgfHwgW107CgogICAgIyBzZXQgYWNjZXNzCiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgIGlmICggJFBhcmFte0NvbmZpZ30tPntBY3Rpb259ICYmICggQHskR3JvdXBzUm99IHx8IEB7JEdyb3Vwc1J3fSApICkgewoKICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAkQWNjZXNzID0gMDsKCiAgICAgICAgIyBmaW5kIHJlYWQgb25seSBncm91cHMKICAgICAgICBST0dST1VQOgogICAgICAgIGZvciBteSAkUm9Hcm91cCAoIEB7JEdyb3Vwc1JvfSApIHsKCiAgICAgICAgICAgIG5leHQgUk9HUk9VUCBpZiAhJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwUm9bJFJvR3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUk9HUk9VUCBpZiAkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifSBuZSAnWWVzJzsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBST0dST1VQOwogICAgICAgIH0KCiAgICAgICAgIyBmaW5kIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFskUndHcm91cF0ifTsKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFskUndHcm91cF0ifSBuZSAnWWVzJzsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBSV0dST1VQOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkQWNjZXNzOwoKICAgICMgb3V0cHV0IG1lbnUgaXRlbQogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNU2VydmljZU1lbnVMaW5rLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51TGluazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFNlcnZpY2VPYmplY3QgTGlua09iamVjdCBVc2VySUQpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2UhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1J3ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfS0+e0dyb3VwfQogICAgICAgIHx8IFtdOwoKICAgICMgc2V0IGFjY2VzcwogICAgbXkgJEFjY2VzcyA9IDE7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICRBY2Nlc3MgPSAwOwoKICAgICAgICAjIGZpbmQgcmVhZCB3cml0ZSBncm91cHMKICAgICAgICBSV0dST1VQOgogICAgICAgIGZvciBteSAkUndHcm91cCAoIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAhJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBjaGVjayBpZiBzZXJ2aWNlcyBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgb2JqZWN0cwogICAgbXkgJVBvc3NpYmxlT2JqZWN0cyA9ICRTZWxmLT57TGlua09iamVjdH0tPlBvc3NpYmxlT2JqZWN0c0xpc3QoCiAgICAgICAgT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGRvbid0IHNob3cgbGluayBtZW51IGl0ZW0gaWYgdGhlcmUgYXJlIG5vIGxpbmthYmxlIG9iamVjdHMKICAgIHJldHVybiBpZiAhJVBvc3NpYmxlT2JqZWN0czsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17U2VydmljZX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNU0xBTWVudUdlbmVyaWMucG0KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU0xBTWVudUdlbmVyaWM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBTTEFPYmplY3QgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U0xBfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU0xBIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSbyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cFJvfQogICAgICAgIHx8IFtdOwogICAgbXkgJEdyb3Vwc1J3ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfS0+e0dyb3VwfQogICAgICAgIHx8IFtdOwoKICAgICMgc2V0IGFjY2VzcwogICAgbXkgJEFjY2VzcyA9IDE7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwUm9bJFJvR3JvdXBdIn0gbmUgJ1llcyc7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUk9HUk9VUDsKICAgICAgICB9CgogICAgICAgICMgZmluZCByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn0gbmUgJ1llcyc7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUldHUk9VUDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIG91dHB1dCBtZW51IGl0ZW0KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWVudUl0ZW0nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtTTEF9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0U2VydmljZS5wbSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdFNlcnZpY2UgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKHNlcnZpY2UpCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RTZXJ2aWNlLT5uZXcoCiAgICAgICAgVXNlckxhbmd1YWdlID0+ICdlbicsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVXNlckxhbmd1YWdlIFVzZXJJRCkpIHsKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9IHx8IGRpZSAiR290IG5vICROZWVkZWQhIjsKICAgIH0KCiAgICAjIFdlIG5lZWQgb3VyIG93biBMYXlvdXRPYmplY3QgaW5zdGFuY2UgdG8gYXZvaWQgYmxvY2tkYXRhIGNvbGxpc2lvbnMKICAgICMgICB3aXRoIHRoZSBtYWluIHBhZ2UuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0gPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0LT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBkZWZpbmUgbmVlZGVkIHZhcmlhYmxlcwogICAgJFNlbGYtPntPYmplY3REYXRhfSA9IHsKICAgICAgICBPYmplY3QgICA9PiAnU2VydmljZScsCiAgICAgICAgUmVhbG5hbWUgPT4gJ1NlcnZpY2UnLAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFRhYmxlQ3JlYXRlQ29tcGxleCgpCgpyZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgYmxvY2sgZGF0YQoKUmV0dXJuCgogICAgQEJsb2NrRGF0YSA9ICgKICAgICAgICBPYmplY3QgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEJsb2NrbmFtZSA9PiAnU2VydmljZScsCiAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUeXBlJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ2hhbmdlZCcsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDE1MCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIEl0ZW1MaXN0ID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0luY2lTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdTZXJ2aWNlIEJsYScsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgID0+ICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPTEyMycsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdPdGhlcicsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0hpZ2gnLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnSW5jaVNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAzMjEsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ1NlcnZpY2UgQmxhJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgPT4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9MzIxJywKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ090aGVyJywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTG93JywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDctMDItMDIgMjI6MTI6MDAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgKTsKCiAgICBAQmxvY2tEYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlQ29tcGxleCgKICAgICAgICBPYmplY3RMaW5rTGlzdFdpdGhEYXRhID0+ICRPYmplY3RMaW5rTGlzdFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVDb21wbGV4IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB8fCByZWYgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY29udmVydCB0aGUgbGlzdAogICAgbXkgJUxpbmtMaXN0OwogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7JExpbmtUeXBlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJERpcmVjdGlvbkxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn07CgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKCiAgICAgICAgICAgICAgICAkTGlua0xpc3R7JFNlcnZpY2VJRH0tPntEYXRhfSA9ICREaXJlY3Rpb25MaXN0LT57JFNlcnZpY2VJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIGl0ZW0gbGlzdAogICAgbXkgQEl0ZW1MaXN0OwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKAogICAgICAgIHNvcnQgeyBsYyAkTGlua0xpc3R7JGF9e0RhdGF9LT57TmFtZX0gY21wIGxjICRMaW5rTGlzdHskYn17RGF0YX0tPntOYW1lfSB9CiAgICAgICAga2V5cyAlTGlua0xpc3QKICAgICAgICApCiAgICB7CgogICAgICAgICMgZXh0cmFjdCBzZXJ2aWNlIGRhdGEKICAgICAgICBteSAkU2VydmljZSA9ICRMaW5rTGlzdHskU2VydmljZUlEfS0+e0RhdGF9OwoKICAgICAgICBteSBASXRlbUNvbHVtbnMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0N1ckluY2lTaWduYWwnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAkU2VydmljZS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICRTZXJ2aWNlLT57Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkU2VydmljZS0+e05hbWV9LAogICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPScKICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICRTZXJ2aWNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkU2VydmljZS0+e0NyaXRpY2FsaXR5fSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRTZXJ2aWNlLT57Q2hhbmdlVGltZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBASXRlbUxpc3QsIFxASXRlbUNvbHVtbnM7CiAgICB9CgogICAgcmV0dXJuIGlmICFASXRlbUxpc3Q7CgogICAgIyBkZWZpbmUgdGhlIGJsb2NrIGRhdGEKICAgIG15ICVCbG9jayA9ICgKICAgICAgICBPYmplY3QgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgQmxvY2tuYW1lID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntSZWFsbmFtZX0sCiAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnSW5jaWRlbnQgU3RhdGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAyMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnU2VydmljZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1R5cGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NyaXRpY2FsaXR5JywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDaGFuZ2VkJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTUwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICAgSXRlbUxpc3QgPT4gXEBJdGVtTGlzdCwKICAgICk7CgogICAgcmV0dXJuICggXCVCbG9jayApOwp9Cgo9aXRlbSBUYWJsZUNyZWF0ZVNpbXBsZSgpCgpyZXR1cm4gYSBoYXNoIHdpdGggdGhlIGxpbmsgb3V0cHV0IGRhdGEKClJldHVybgoKICAgICVMaW5rT3V0cHV0RGF0YSA9ICgKICAgICAgICBOb3JtYWw6OlNvdXJjZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6VGhlIHNlcnZpY1suLl0nLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ1NlcnZpY2U6IFRoZSBzZXJ2aWNlIG5hbWUnLAogICAgICAgICAgICAgICAgICAgIENzcyAgICAgPT4gJ3N0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTOk5hbWUgb2Ygc2VydmljWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogTmFtZSBvZiBzZXJ2aWNlIDInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFBhcmVudENoaWxkOjpUYXJnZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTOlNlcnZpY2UgbmFtWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogU2VydmljZSBuYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJUxpbmtPdXRwdXREYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlU2ltcGxlKAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZVNpbXBsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKAogICAgICAgICAgICAgICAgc29ydCB7CiAgICAgICAgICAgICAgICAgICAgbGMgJERpcmVjdGlvbkxpc3QtPnskYX0tPntOYW1lU2hvcnR9IGNtcCBsYyAkRGlyZWN0aW9uTGlzdC0+eyRifS0+e05hbWVTaG9ydH0KICAgICAgICAgICAgICAgIH0ga2V5cyAleyREaXJlY3Rpb25MaXN0fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2UgPSAkRGlyZWN0aW9uTGlzdC0+eyRTZXJ2aWNlSUR9OwoKICAgICAgICAgICAgICAgICMgZGVmaW5lIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgbXkgJUl0ZW0gPSAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAiUzokU2VydmljZS0+e05hbWVTaG9ydH0iLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JwogICAgICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDIwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXCVJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBpdGVtIGxpc3QgdG8gbGluayBvdXRwdXQgZGF0YQogICAgICAgICAgICAkTGlua091dHB1dERhdGF7ICRMaW5rVHlwZSAuICc6OicgLiAkRGlyZWN0aW9uIH0tPntTZXJ2aWNlfSA9IFxASXRlbUxpc3Q7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlTGlua091dHB1dERhdGE7Cn0KCj1pdGVtIENvbnRlbnRTdHJpbmdDcmVhdGUoKQoKcmV0dXJuIGEgb3V0cHV0IHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5Db250ZW50U3RyaW5nQ3JlYXRlKAogICAgICAgIENvbnRlbnREYXRhID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDb250ZW50U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb250ZW50RGF0YX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbnRlbnREYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleHRyYWN0IGNvbnRlbnQKICAgIG15ICRDb250ZW50ID0gJFBhcmFte0NvbnRlbnREYXRhfTsKCiAgICByZXR1cm4gaWYgJENvbnRlbnQtPntUeXBlfSBuZSAnQ3VySW5jaVNpZ25hbCc7CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ2dyZWVubGVkJywKICAgICAgICB1bmtub3duICAgICA9PiAnZ3JheWxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICApOwoKICAgICMgaW52ZXN0aWdhdGUgY3VycmVudCBpbmNpZGVudCBzaWduYWwKICAgICRDb250ZW50LT57Q3VySW5jaVN0YXRlVHlwZX0gfHw9ICd1bmtub3duJzsKICAgIG15ICRDdXJJbmNpU2lnbmFsID0gJEluY2lTaWduYWxzeyAkQ29udGVudC0+e0N1ckluY2lTdGF0ZVR5cGV9IH07CiAgICAkQ3VySW5jaVNpZ25hbCB8fD0gJEluY2lTaWduYWxze3Vua25vd259OwoKICAgIG15ICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCIgdGl0bGU9IlslIERhdGEuQ3VySW5jaVN0YXRlIHwgaHRtbCAlXSI+ICcKICAgICAgICAgICAgLiAnPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4gPC9kaXY+JywKCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEN1ckluY2lTaWduYWwsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgPT4gJENvbnRlbnQtPntDb250ZW50fSB8fCAnJywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWl0ZW0gU2VsZWN0YWJsZU9iamVjdExpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWxlY3RhYmxlIG9iamVjdHMKClJldHVybgoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gJ1NlcnZpY2UnLAogICAgICAgIH0sCiAgICApOwoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICRMaW5rT2JqZWN0LT5TZWxlY3RhYmxlT2JqZWN0TGlzdCgKICAgICAgICBTZWxlY3RlZCA9PiAkSWRlbnRpZmllciwgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBTZWxlY3RhYmxlT2JqZWN0TGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxlY3RlZDsKICAgIGlmICggJFBhcmFte1NlbGVjdGVkfSAmJiAkUGFyYW17U2VsZWN0ZWR9IGVxICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9ICkgewogICAgICAgICRTZWxlY3RlZCA9IDE7CiAgICB9CgogICAgIyBvYmplY3Qgc2VsZWN0IGxpc3QKICAgIG15IEBPYmplY3RTZWxlY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgICAgIFZhbHVlICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntSZWFsbmFtZX0sCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdFNlbGVjdExpc3Q7Cn0KCj1pdGVtIFNlYXJjaE9wdGlvbkxpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWFyY2ggb3B0aW9ucwoKUmV0dXJuCgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBJbnB1dFN0cmcgPT4gJEZvcm1TdHJpbmcsCiAgICAgICAgICAgIEZvcm1EYXRhICA9PiAnU2VydmljZSBOYW1lJywKICAgICAgICB9LAogICAgKTsKCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICRMaW5rT2JqZWN0LT5TZWFyY2hPcHRpb25MaXN0KCk7Cgo9Y3V0CgpzdWIgU2VhcmNoT3B0aW9uTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2VhcmNoIG9wdGlvbiBsaXN0CiAgICBteSBAU2VhcmNoT3B0aW9uTGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgPT4gJ05hbWUnLAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9ybWtleQogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CiAgICAgICAgJFJvdy0+e0Zvcm1LZXl9ID0gJ1NFQVJDSDo6JyAuICRSb3ctPntLZXl9OwogICAgfQoKICAgICMgYWRkIGZvcm0gZGF0YSBhbmQgaW5wdXQgc3RyaW5nCiAgICBST1c6CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKCiAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgJFJvdy0+e0Zvcm1EYXRhfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwoKICAgICAgICAjIHBhcnNlIHRoZSBpbnB1dCB0ZXh0IGJsb2NrCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkUm93LT57Rm9ybUtleX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUm93LT57Rm9ybURhdGF9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0xpbmtPYmplY3QnLAogICAgICAgICk7CgogICAgICAgIG5leHQgUk9XOwogICAgfQoKICAgIHJldHVybiBAU2VhcmNoT3B0aW9uTGlzdDsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEFBQUlUU01Db3JlLnR0IC0gJFRleHQgdmFyaWFibGUgZmlsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uClslIFRyYW5zbGF0ZSgiQWx0ZXJuYXRpdmUgdG8iKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJBdmFpbGFiaWxpdHkiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJCYWNrIEVuZCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkNvbm5lY3RlZCB0byIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkN1cnJlbnQgU3RhdGUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJEZW1vbnN0cmF0aW9uIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiRGVwZW5kcyBvbiIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkVuZCBVc2VyIFNlcnZpY2UiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJFcnJvcnMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJGcm9udCBFbmQiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJVCBNYW5hZ2VtZW50IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiSVQgT3BlcmF0aW9uYWwiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJbXBhY3QiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkluY2x1ZGVzIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiT3RoZXIiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJQYXJ0IG9mIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiUHJvamVjdCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlY292ZXJ5IFRpbWUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJSZWxldmFudCB0byIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlcG9ydGluZyIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlcXVpcmVkIGZvciIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlc29sdXRpb24gUmF0ZSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlc3BvbnNlIFRpbWUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTTEEgT3ZlcnZpZXciKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIE92ZXJ2aWV3IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiU2VydmljZS1BcmVhIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiVHJhaW5pbmciKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJUcmFuc2FjdGlvbnMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJVbmRlcnBpbm5pbmcgQ29udHJhY3QiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJhbGxvY2F0aW9uIikgfCBodG1sICVdCg==
IyAtLQojIEFkbWluSVRTTUNJUEFsbG9jYXRlLnR0IC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pbklUU01DSVBBbGxvY2F0ZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHkiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+PGgyPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTwvaDI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkgYWxsb2NhdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNJUEFsbG9jYXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgRGF0YVRhYmxlTm9IaWdobGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNvbHVtbkRlc2NyaXB0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQ2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEZXNjcmlwdGlvbkNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiRGVzY3JpcHRpb25DZWxsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGVudENlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSI+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9kaXY+Cg==
IyAtLQojIEFkbWluU2VydmljZS50dCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWRtaW5TZXJ2aWNlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzFiMjYxYWQwNmY4ZGU0MTkwNTEwZjI4YjhhMjYwYmQ2MjY2NzA1Y2MvS2VybmVsL091dHB1dC9IVE1ML1N0YW5kYXJkL0FkbWluU2VydmljZS50dAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlcnZpY2VFZGl0O1NlcnZpY2VJRD1ORVciIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgc2VydmljZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgRGF0YS5MZXZlbFNwYWNlIHwgaHRtbCAlXTxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCB0cnVuY2F0ZSg4MCkgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iPlslIERhdGEuQ29tbWVudCB8IHRydW5jYXRlKDIwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlZhbGlkKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTZXJ2aWNlIikgfCBodG1sICVdIDogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJFZGl0IikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZXJ2aWNlU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNlcnZpY2VJRCIgdmFsdWU9IlslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSIvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZUludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlBhcmVudElEIj5bJSBUcmFuc2xhdGUoIlN1Yi1zZXJ2aWNlIG9mIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBhcmVudE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlR5cGVJRCI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlR5cGVPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDcml0aWNhbGl0eSI+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Dcml0aWNhbGl0eU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb21tZW50IiBpZD0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXMjVwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXRLZXkiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXMjVwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+KFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXSk8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4oWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdKTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk9wdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHR5cGU9ImZpbGUiIHNpemU9IjMwIiBjbGFzcz0iZml4ZWQiLz48YnIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIj5bJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlVwbG9hZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlBhc3N3b3JkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBjbGFzcz0iVzI1cGMiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZUVkaXQiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=
IyAtLQojIEFkbWluU0xBLnR0IC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pblNMQQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8xYjI2MWFkMDZmOGRlNDE5MDUxMGYyOGI4YTI2MGJkNjI2NjcwNWNjL0tlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9BZG1pblNMQS50dAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNMQSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TTEFFZGl0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIFNMQSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQoKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uTGlzdCIpICVdCgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TTEFFZGl0O1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5TZXJ2aWNlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyNikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTTEEiKSB8IGh0bWwgJV08L2gyPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQWRkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyRWRpdCIpICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJFZGl0IFNMQSIpIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJFZGl0IikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTTEFTYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU0xBSUQiIHZhbHVlPSJbJSBEYXRhLlNMQUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5hbWUiPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLk5hbWVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2VydmljZUlEcyI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNlcnZpY2VJRHMiPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNlcnZpY2VPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDYWxlbmRhciI+WyUgVHJhbnNsYXRlKCJDYWxlbmRhciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNhbGVuZGFyT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRmlyc3RSZXNwb25zZVRpbWUiPlslIFRyYW5zbGF0ZSgiRXNjYWxhdGlvbiAtIGZpcnN0IHJlc3BvbnNlIHRpbWUiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkZpcnN0UmVzcG9uc2VUaW1lIiBpZD0iRmlyc3RSZXNwb25zZVRpbWUiIHZhbHVlPSJbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHB4IFZhbGlkYXRlX051bWJlciIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmlyc3RSZXNwb25zZVRpbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHdyaXRlIG9ubHkgbnVtYmVycyEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxhYmVsIGZvcj0iRmlyc3RSZXNwb25zZU5vdGlmeSI+WyUgVHJhbnNsYXRlKCJOb3RpZnkgYnkiKSB8IGh0bWwgJV08L2xhYmVsPiBbJSBEYXRhLkZpcnN0UmVzcG9uc2VOb3RpZnlPcHRpb25TdHJnICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiMCA9IG5vIGVzY2FsYXRpb24iKSB8IGh0bWwgJV0gLSAyNCBbJSBUcmFuc2xhdGUoImhvdXJzIikgfCBodG1sICVdID0gMTQ0MCBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIk9ubHkgYnVzaW5lc3MgaG91cnMgYXJlIGNvdW50ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJVcGRhdGVUaW1lIj5bJSBUcmFuc2xhdGUoIkVzY2FsYXRpb24gLSB1cGRhdGUgdGltZSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVXBkYXRlVGltZSIgaWQ9IlVwZGF0ZVRpbWUiIHZhbHVlPSJbJSBEYXRhLlVwZGF0ZVRpbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcHggVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjEwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJVcGRhdGVUaW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsYWJlbCBmb3I9IlVwZGF0ZU5vdGlmeSI+WyUgVHJhbnNsYXRlKCJOb3RpZnkgYnkiKSB8IGh0bWwgJV08L2xhYmVsPiBbJSBEYXRhLlVwZGF0ZU5vdGlmeU9wdGlvblN0cmcgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCIwID0gbm8gZXNjYWxhdGlvbiIpIHwgaHRtbCAlXSAtIDI0IFslIFRyYW5zbGF0ZSgiaG91cnMiKSB8IGh0bWwgJV0gPSAxNDQwIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiT25seSBidXNpbmVzcyBob3VycyBhcmUgY291bnRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNvbHV0aW9uVGltZSI+WyUgVHJhbnNsYXRlKCJFc2NhbGF0aW9uIC0gc29sdXRpb24gdGltZSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iU29sdXRpb25UaW1lIiBpZD0iU29sdXRpb25UaW1lIiB2YWx1ZT0iWyUgRGF0YS5Tb2x1dGlvblRpbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcHggVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjEwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTb2x1dGlvblRpbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHdyaXRlIG9ubHkgbnVtYmVycyEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxhYmVsIGZvcj0iU29sdXRpb25Ob3RpZnkiPlslIFRyYW5zbGF0ZSgiTm90aWZ5IGJ5IikgfCBodG1sICVdPC9sYWJlbD4gWyUgRGF0YS5Tb2x1dGlvbk5vdGlmeU9wdGlvblN0cmcgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCIwID0gbm8gZXNjYWxhdGlvbiIpIHwgaHRtbCAlXSAtIDI0IFslIFRyYW5zbGF0ZSgiaG91cnMiKSB8IGh0bWwgJV0gPSAxNDQwIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiT25seSBidXNpbmVzcyBob3VycyBhcmUgY291bnRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIj5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTWluVGltZUJldHdlZW5JbmNpZGVudHMiIGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50cyIgdmFsdWU9IlslIERhdGEuTWluVGltZUJldHdlZW5JbmNpZGVudHMgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMgVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjE1Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNMQUl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dEtleSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGV4dEFyZWEiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPcHRpb24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJVcGxvYWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdHlwZT0iZmlsZSIgY2xhc3M9ImZpeGVkIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiPlslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVXBsb2FkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFzc3dvcmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEFFZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoLnR0IC0gcHJvdmlkZXMgYXV0b2NvbXBsZXRlIGZlYXR1cmUgZm9yIGN1c3RvbWVyIHNlYXJjaAojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIkN1c3RvbWVyU2VhcmNoSW5pdCIpICVdClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIElUU006IHRydWUgKi8KCiAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgIElUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2guSW5pdCggJCgiIyIgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigiWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdIikgKSApOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkN1c3RvbWVyU2VhcmNoSW5pdCIpICVdCg==
IyAtLQojIEFnZW50SVRTTVNlcnZpY2UudHQgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50SVRTTVNlcnZpY2UKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQXJpYVJvbGVNYWluIFNwYWNpbmdUb3AiPgogICAgPGRpdiBjbGFzcz0iVzc1cGMgU3BhY2luZ0JvdHRvbSBDZW50ZXJCb3giPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJPdmVydmlldyIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgU3BhY2luZ0JvdHRvbSI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgJV0iIHRpdGxlPSJbJSBEYXRhLlN0YXRlICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGV2ZWxTcGFjZSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5Dcml0aWNhbGl0eSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1JvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIEFnZW50SVRTTVNlcnZpY2VQcmludC50dCAtIHByb3ZpZGVzIEhUTUwgcHJpbnQgdmlldwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjEwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTZXJ2aWNlLUluZm8iKSB8IGh0bWwgJV06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjEwJSI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiIHdpZHRoPSI0MCUiPlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjAlIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgd2lkdGg9IjMwJSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DcmVhdGVCeU5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJjb250ZW50dmFsdWUiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBc3NvY2lhdGVkU0xBcyIpICVdCiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBc3NvY2lhdGVkIFNMQXMiKSB8IGh0bWwgJV06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBc3NvY2lhdGVkU0xBc1JvdyIpICVdCiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjAlIj5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJBc3NvY2lhdGVkU0xBc1JvdyIpICVdCiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC90ZD4KICAgIDwvdHI+CjwvdGFibGU+ClslIFJlbmRlckJsb2NrRW5kKCJBc3NvY2lhdGVkU0xBcyIpICVdCjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI2NDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iIzAwMDAwMCIgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8dHI+CiAgICAgICAgPHRkPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iMTAiIGNlbGxzcGFjaW5nPSIxIiBiZ2NvbG9yPSIjZmZmZmZmIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNmZmZmZmYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJzbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjIwJSI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo=
IyAtLQojIEFnZW50SVRTTVNlcnZpY2Vab29tLnR0IC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZ2VudElUU01TZXJ2aWNlWm9vbQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDEgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBpbmNpZGVudCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBEb250UHJpbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaW5rZWQgT2JqZWN0cyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGlua1RhYmxlU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEEiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50IFNwYWNpbmdUb3AgIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBc3NvY2lhdGVkIFNMQXMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNMQSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIEFnZW50SVRTTVNMQS50dCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRJVFNNU0xBCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFyaWFSb2xlTWFpbiBTcGFjaW5nVG9wIj4KICAgIDxkaXYgY2xhc3M9Ilc3NXBjIFNwYWNpbmdCb3R0b20gQ2VudGVyQm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiT3ZlcnZpZXciKSB8IGh0bWwgJV06IFslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgU3BhY2luZ0JvdHRvbSI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSb3ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIEFnZW50SVRTTVNMQVByaW50LnR0IC0gcHJvdmlkZXMgSFRNTCBwcmludCB2aWV3CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RkPgogICAgPC90cj4KPC90YWJsZT4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU0xBLUluZm8iKSB8IGh0bWwgJV06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjIwJSI+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgd2lkdGg9IjMwJSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjAlIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgd2lkdGg9IjMwJSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DcmVhdGVCeU5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJjb250ZW50dmFsdWUiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiMwMDAwMDAiIGNsYXNzPSJjb250YWluZXIiPgogICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjY0MCIgY2VsbHBhZGRpbmc9IjEwIiBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI2ZmZmZmZiI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjZmZmZmZmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxMDAlIiBjbGFzcz0ic21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuQ2FsZW5kYXJOYW1lKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiRmlyc3QgUmVzcG9uc2UgVGltZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiVXBkYXRlIFRpbWUiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiU29sdXRpb24gVGltZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLlNvbHV0aW9uVGltZSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLk1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KPC90YWJsZT4K
IyAtLQojIEFnZW50SVRTTVNMQVpvb20udHQgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50SVRTTVNMQVpvb20KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkhlYWRsaW5lIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L2gxPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU0xBIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIFRpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuTWVudUNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiTWVudUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRCb3ggU3BhY2luZ1RvcCBFeHBhbmRlZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJMaWdodFJvdyBIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudC4iKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2FsZW5kYXJOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRmlyc3QgUmVzcG9uc2UgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaXJzdFJlc3BvbnNlVGltZSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJVcGRhdGUgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlNvbHV0aW9uIFRpbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU29sdXRpb25UaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5NaW5UaW1lQmV0d2VlbkluY2lkZW50cyB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2UiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTZXJ2aWNlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCgogICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgndWwuQWN0aW9ucyBhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vTGlua09iamVjdC9TZXJ2aWNlLnBtIC0gdG8gbGluayBzZXJ2aWNlIG9iamVjdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlCgo9aGVhZDEgU1lOT1BTSVMKClNlcnZpY2UgYmFja2VuZCBmb3IgdGhlIHNlcnZpY2UgbGluayBvYmplY3QuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRMaW5rT2JqZWN0U2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gTGlua0xpc3RXaXRoRGF0YSgpCgpmaWxsIHVwIHRoZSBsaW5rIGxpc3Qgd2l0aCBkYXRhCgogICAgJFN1Y2Nlc3MgPSAkTGlua09iamVjdEJhY2tlbmQtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgTGlua0xpc3QgPT4gJEhhc2hSZWYsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0xpc3RXaXRoRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhMaW5rTGlzdCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbGluayBsaXN0CiAgICBpZiAoIHJlZiAkUGFyYW17TGlua0xpc3R9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0xpbmtMaXN0IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fSB9ICkgewoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfSB9ICkgewoKICAgICAgICAgICAgU0VSVklDRUlEOgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259IH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgaWQgZnJvbSBoYXNoIGlmIG5vIHNlcnZpY2UgZGF0YSB3YXMgZm91bmQKICAgICAgICAgICAgICAgIGlmICggISVTZXJ2aWNlRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRTZXJ2aWNlSUR9OwogICAgICAgICAgICAgICAgICAgIG5leHQgU0VSVklDRUlEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YQogICAgICAgICAgICAgICAgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRTZXJ2aWNlSUR9ID0gXCVTZXJ2aWNlRGF0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gT2JqZWN0UGVybWlzc2lvbigpCgpjaGVja3MgcmVhZCBwZXJtaXNzaW9uIGZvciBhIGdpdmVuIG9iamVjdCBhbmQgVXNlcklELgoKICAgICRQZXJtaXNzaW9uID0gJExpbmtPYmplY3QtPk9iamVjdFBlcm1pc3Npb24oCiAgICAgICAgT2JqZWN0ICA9PiAnU2VydmljZScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG1vZHVsZSByZWdpc3RyeSBvZiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgbXkgJE1vZHVsZVJlZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57QWdlbnRJVFNNU2VydmljZVpvb219OwoKICAgICMgZG8gbm90IGdyYW50IGFjY2VzcyBpZiBmcm9udGVuZCBtb2R1bGUgaXMgbm90IHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJE1vZHVsZVJlZzsKCiAgICAjIGdyYW50IGFjY2VzcyBpZiBtb2R1bGUgcGVybWlzc29uIGhhcyBubyBHcm91cCBvciBHcm91cFJvIGRlZmluZWQKICAgIGlmICggISRNb2R1bGVSZWctPntHcm91cFJvfSAmJiAhJE1vZHVsZVJlZy0+e0dyb3VwfSApIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBQRVJNSVNTSU9OOgogICAgZm9yIG15ICRQZXJtaXNzaW9uIChxdyhHcm91cFJvIEdyb3VwKSkgewoKICAgICAgICBuZXh0IFBFUk1JU1NJT04gaWYgISRNb2R1bGVSZWctPnskUGVybWlzc2lvbn07CiAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmIHJlZiAkTW9kdWxlUmVnLT57JFBlcm1pc3Npb259IG5lICdBUlJBWSc7CgogICAgICAgIGZvciBteSAkR3JvdXAgKCBAeyAkTW9kdWxlUmVnLT57JFBlcm1pc3Npb259IH0gKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgZ3JvdXAgaWQKICAgICAgICAgICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwoKICAgICAgICAgICAgbXkgJFR5cGU7CiAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gZXEgJ0dyb3VwUm8nICkgewogICAgICAgICAgICAgICAgJFR5cGUgPSAncm8nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFBlcm1pc3Npb24gZXEgJ0dyb3VwJyApIHsKICAgICAgICAgICAgICAgICRUeXBlID0gJ3J3JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcHJpdmlsZWdlCiAgICAgICAgICAgIG15ICVHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICRUeXBlLAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ3JhbnQgYWNjZXNzIGlmIGFnZW50IGlzIGEgbWVtYmVyIGluIHRoZSBncm91cAogICAgICAgICAgICByZXR1cm4gMSBpZiAkR3JvdXBzeyRHcm91cElEfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9Cgo9aXRlbSBPYmplY3REZXNjcmlwdGlvbkdldCgpCgpyZXR1cm4gYSBoYXNoIG9mIG9iamVjdCBkZXNjcmlwdGlvbnMKClJldHVybgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiU2VydmljZSBTZXJ2aWNlTmFtZSIsCiAgICAgICAgTG9uZyAgID0+ICJTZXJ2aWNlIFBhcmVudFNlcnZpY2U6OlNlcnZpY2VOYW1lIiwKICAgICk7CgogICAgJURlc2NyaXB0aW9uID0gJExpbmtPYmplY3QtPk9iamVjdERlc2NyaXB0aW9uR2V0KAogICAgICAgIEtleSAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0RGVzY3JpcHRpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEtleSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICBteSAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICdTZXJ2aWNlJywKICAgICAgICBMb25nICAgPT4gJ1NlcnZpY2UnLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uIGlmICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICElU2VydmljZTsKCiAgICAjIGNyZWF0ZSBkZXNjcmlwdGlvbgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiU2VydmljZSAnJFNlcnZpY2V7TmFtZVNob3J0fSciLAogICAgICAgIExvbmcgICA9PiAiU2VydmljZSAnJFNlcnZpY2V7TmFtZX0nIiwKICAgICk7CgogICAgcmV0dXJuICVEZXNjcmlwdGlvbjsKfQoKPWl0ZW0gT2JqZWN0U2VhcmNoKCkKCnJldHVybiBhIGhhc2ggbGlzdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHMKClJldHVybgogICAgJFNlYXJjaExpc3QgPSB7CiAgICAgICAgTk9UTElOS0VEID0+IHsKICAgICAgICAgICAgU291cmNlID0+IHsKICAgICAgICAgICAgICAgIDEyICA9PiAkRGF0YU9mSXRlbTEyLAogICAgICAgICAgICAgICAgMjEyID0+ICREYXRhT2ZJdGVtMjEyLAogICAgICAgICAgICAgICAgMzMyID0+ICREYXRhT2ZJdGVtMzMyLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWFyY2hMaXN0ID0gJExpbmtPYmplY3RCYWNrZW5kLT5PYmplY3RTZWFyY2goCiAgICAgICAgU2VhcmNoUGFyYW1zID0+ICRIYXNoUmVmLCAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdFNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBwYXJhbXMKICAgICRQYXJhbXtTZWFyY2hQYXJhbXN9IHx8PSB7fTsKCiAgICAjIGFkZCB3aWxkY2FyZHMKICAgIG15ICVTZWFyY2g7CiAgICBpZiAoICRQYXJhbXtTZWFyY2hQYXJhbXN9LT57TmFtZX0gKSB7CiAgICAgICAgJFNlYXJjaHtOYW1lfSA9ICcqJyAuICRQYXJhbXtTZWFyY2hQYXJhbXN9LT57TmFtZX0gLiAnKic7CiAgICB9CgogICAgIyBzZWFyY2ggdGhlIHNlcnZpY2VzCiAgICBteSBAU2VydmljZUlEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VTZWFyY2goCiAgICAgICAgJXsgJFBhcmFte1NlYXJjaFBhcmFtc30gfSwKICAgICAgICAlU2VhcmNoLAogICAgICAgIExpbWl0ICA9PiA1MCwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVTZWFyY2hMaXN0OwogICAgU0VSVklDRUlEOgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlSURzKSB7CgogICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG5leHQgU0VSVklDRUlEIGlmICElU2VydmljZURhdGE7CgogICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YQogICAgICAgICRTZWFyY2hMaXN0e05PVExJTktFRH0tPntTb3VyY2V9LT57JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2VEYXRhOwogICAgfQoKICAgIHJldHVybiBcJVNlYXJjaExpc3Q7Cn0KCj1pdGVtIExpbmtBZGRQcmUoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rQWRkUHJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0FkZFBvc3QoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQb3N0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0RlbGV0ZVByZSgpCgpsaW5rIGRlbGV0ZSBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUG9zdCgpCgpsaW5rIGRlbGV0ZSBwb3N0IGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQb3N0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIHVwZGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZyb20gQ0lzIG9mIHRoZSBzZXJ2aWNlCiAgICAjIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBkeW5hbWljIGluY2lkZW50IGNhbGN1bGF0aW9uIGlzIHJlc2V0IGFmdGVyCiAgICAjIHVubGlua2luZyBhIENJIHdoaWNoIGhhcyBiZWVuIGluIGFuIGluY2lkZW50IHN0YXRlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgIFZhbHVlICAgICA9PiAnJywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQKCjE7Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlIC0gY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbiBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkSVRTTUNJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEFsbG9jYXRlTGlzdCgpCgpyZXR1cm4gYSAyZCBoYXNoIHJlZmVyZW5jZSBvZiBhbGxvY2F0aW9ucwoKICAgIG15ICRMaXN0UmVmID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKQzwkTGlzdFJlZj4gaXMgc29tZXRoaW5nIGxpa2UKCiAgICAkTGlzdFJldCA9IHsKICAgICAgICAnMyBub3JtYWwnID0+IHsKICAgICAgICAgICAgJzEgdmVyeSBsb3cnID0+IDEsCiAgICAgICAgICAgICczIG5vcm1hbCcgICA9PiAyLAogICAgICAgICAgICAnNCBoaWdoJyAgICAgPT4gMywKICAgICAgICB9LAogICAgICAgICc1IHZlcnkgaGlnaCcgPT4gewogICAgICAgICAgICAnMiBsb3cnICAgID0+IDMsCiAgICAgICAgICAgICczIG5vcm1hbCcgPT4gNCwKICAgICAgICAgICAgJzQgaGlnaCcgICA9PiA1LAogICAgICAgIH0sCiAgICB9OwoKbWVhbmluZyB0aGF0IHRoZSBDcml0aWNhbGl0eSAnMyBub3JtYWwnIGFuZCB0aGUgSW1wYWN0ICcxIHZlcnkgbG93JyBzdWdnZXN0IHRoZSBQcmlvcml0eUlEICcxJy4KCj1jdXQKCnN1YiBBbGxvY2F0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjcml0aWNhbGl0eSwgaW1wYWN0LCBwcmlvcml0eV9pZCBGUk9NIGNpcF9hbGxvY2F0ZScsCiAgICApOwoKICAgICMgcmVzdWx0IGxpc3QKICAgIG15ICVBbGxvY2F0ZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbGxvY2F0ZURhdGF7ICRSb3dbMV0gfXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICByZXR1cm4gXCVBbGxvY2F0ZURhdGE7Cn0KCj1pdGVtIEFsbG9jYXRlVXBkYXRlKCkKCnVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBvZiBjcml0aWNhbGl0eSwgaW1wYWN0IGFuZCBwcmlvcml0eQoKICAgIG15ICRUcnVlID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJERhdGFSZWYsICAjIDJEIGhhc2ggcmVmZXJlbmNlCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFsbG9jYXRlRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgYWxsb2NhdGUgZGF0YSBpcyBhIGhhc2ggcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBhbGxvY2F0ZSBkYXRhIGlzIGEgMkQgaGFzaCByZWZlcmVuY2UKICAgIElNUEFDVDoKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRQYXJhbXtBbGxvY2F0ZURhdGF9IH0gKSB7CgogICAgICAgIG5leHQgSU1QQUNUIGlmIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9IGVxICdIQVNIJzsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGFsbG9jYXRpb25zCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oIFNRTCA9PiAnREVMRVRFIEZST00gY2lwX2FsbG9jYXRlJyApOwoKICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRJbXBhY3QgKCBzb3J0IGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9IH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgcHJpb3JpdHkKICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9uCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY2lwX2FsbG9jYXRlICcKICAgICAgICAgICAgICAgICAgICAuICcoY3JpdGljYWxpdHksIGltcGFjdCwgcHJpb3JpdHlfaWQsICcKICAgICAgICAgICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAgICAgICAgIC4gJyg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgICAgIFwkQ3JpdGljYWxpdHksIFwkSW1wYWN0LCBcJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkKCnJldHVybiB0aGUgcHJpb3JpdHkgaWQgb2YgYSBjcml0aWNhbGl0eSBhbmQgYW4gaW1wYWN0CgogICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgSW1wYWN0ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICk7Cgo9Y3V0CgpzdWIgUHJpb3JpdHlBbGxvY2F0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENyaXRpY2FsaXR5IEltcGFjdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgcHJpb3JpdHkgaWQgZnJvbSBkYgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgcHJpb3JpdHlfaWQgRlJPTSBjaXBfYWxsb2NhdGUgJwogICAgICAgICAgICAuICdXSEVSRSBjcml0aWNhbGl0eSA9ID8gQU5EIGltcGFjdCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDcml0aWNhbGl0eX0sIFwkUGFyYW17SW1wYWN0fSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggcmVzdWx0CiAgICBteSAkUHJpb3JpdHlJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFByaW9yaXR5SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkUHJpb3JpdHlJRDsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZS5wbSAtIGFsbCBzZXJ2aWNlIGZ1bmN0aW9uCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzFiMjYxYWQwNmY4ZGU0MTkwNTEwZjI4YjhhMjYwYmQ2MjY2NzA1Y2MvS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIChxdyg6YWxsKSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAojIC0tLQojIElUU00KIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U2VydmljZSAtIHNlcnZpY2UgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBzZXJ2aWNlIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0RCT2JqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdTZXJ2aWNlJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDIwOwojIC0tLQojIElUU00KIyAtLS0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBzZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSA9ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9OwojIC0tLQoKICAgICMgbG9hZCBnZW5lcmF0b3IgcHJlZmVyZW5jZXMgbW9kdWxlCiAgICBteSAkR2VuZXJhdG9yTW9kdWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTZXJ2aWNlOjpQcmVmZXJlbmNlc01vZHVsZScpCiAgICAgICAgfHwgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOjpQcmVmZXJlbmNlc0RCJzsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJhdG9yTW9kdWxlKSApIHsKICAgICAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fSA9ICRHZW5lcmF0b3JNb2R1bGUtPm5ldyggJXskU2VsZn0gKTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFNlcnZpY2VMaXN0KCkKCnJldHVybiBhIGhhc2ggbGlzdCBvZiBzZXJ2aWNlcwoKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxICgwfDEpCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHZhbGlkIHBhcmFtCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFBhcmFte1ZhbGlkfSA9IDE7CiAgICB9CgogICAgIyByZWFkIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnU2VydmljZUxpc3Q6OlZhbGlkOjonIC4gJFBhcmFte1ZhbGlkfTsKCiAgICBpZiAoICRQYXJhbXtWYWxpZH0gJiYgZGVmaW5lZCAkUGFyYW17S2VlcENoaWxkcmVufSAmJiAkUGFyYW17S2VlcENoaWxkcmVufSBlcSAnMScgKSB7CiAgICAgICAgJENhY2hlS2V5IC49ICc6OktlZXBDaGlsZHJlbjo6JyAuICRQYXJhbXtLZWVwQ2hpbGRyZW59OwogICAgfQoKICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICV7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdIQVNIJzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUsIHZhbGlkX2lkIEZST00gc2VydmljZScsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNlcnZpY2VMaXN0OwogICAgbXkgJVNlcnZpY2VWYWxpZExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTZXJ2aWNlTGlzdHsgJFJvd1swXSB9ICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlVmFsaWRMaXN0eyAkUm93WzBdIH0gPSAkUm93WzJdOwogICAgfQoKICAgIGlmICggISRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVTZXJ2aWNlTGlzdCBpZiAhJFBhcmFte1ZhbGlkfTsKICAgIH0KCiAgICAjIGdldCB2YWxpZCBpZHMKICAgIG15IEBWYWxpZElEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICMgZHVwbGljYXRlIHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0VG1wID0gJVNlcnZpY2VMaXN0OwoKICAgICMgYWRkIHN1ZmZpeCBmb3IgY29ycmVjdCBzb3J0aW5nCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3RUbXAgKSB7CiAgICAgICAgJFNlcnZpY2VMaXN0VG1weyRTZXJ2aWNlSUR9IC49ICc6Oic7CiAgICB9CgogICAgbXkgJVNlcnZpY2VJbnZhbGlkTGlzdDsKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCB7ICRTZXJ2aWNlTGlzdFRtcHskYX0gY21wICRTZXJ2aWNlTGlzdFRtcHskYn0gfSBrZXlzICVTZXJ2aWNlTGlzdFRtcCApCiAgICB7CgogICAgICAgIG15ICRWYWxpZCA9IHNjYWxhciBncmVwIHsgJF8gZXEgJFNlcnZpY2VWYWxpZExpc3R7JFNlcnZpY2VJRH0gfSBAVmFsaWRJRHM7CgogICAgICAgIG5leHQgU0VSVklDRUlEIGlmICRWYWxpZDsKCiAgICAgICAgJFNlcnZpY2VJbnZhbGlkTGlzdHsgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IH0gPSAxOwogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICB9CgogICAgIyBkZWxldGUgaW52YWxpZCBzZXJ2aWNlcyBhbmQgY2hpbGRyZW4KICAgIGlmICggIWRlZmluZWQgJFBhcmFte0tlZXBDaGlsZHJlbn0gfHwgISRQYXJhbXtLZWVwQ2hpbGRyZW59ICkgewogICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKCiAgICAgICAgICAgIElOVkFMSUROQU1FOgogICAgICAgICAgICBmb3IgbXkgJEludmFsaWROYW1lICggc29ydCBrZXlzICVTZXJ2aWNlSW52YWxpZExpc3QgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPX4gbXsgXEEgXFEkSW52YWxpZE5hbWVcRSA6OiB9eG1zICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAgICAgbGFzdCBJTlZBTElETkFNRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlU2VydmljZUxpc3QsCiAgICApOwoKICAgIHJldHVybiAlU2VydmljZUxpc3Q7Cn0KCj1pdGVtIFNlcnZpY2VMaXN0R2V0KCkKCnJldHVybiBhIGxpc3Qgb2Ygc2VydmljZXMgd2l0aCB0aGUgY29tcGxldGUgbGlzdCBvZiBhdHRyaWJ1dGVzIGZvciBlYWNoIHNlcnZpY2UKCiAgICBteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgVmFsaWQgID0+IDAsICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm5zCgogICAgJFNlcnZpY2VMaXN0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgU2VydmljZUlEICA9PiAxLAogICAgICAgICAgICBQYXJlbnRJRCAgID0+IDAsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ015U2VydmljZScsCiAgICAgICAgICAgIE5hbWVTaG9ydCAgPT4gJ015U2VydmljZScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAnU29tZSBDb21tZW50JwogICAgICAgICAgICBDcmVhdGVUaW1lID0+ICcyMDExLTAyLTA4IDE1OjA4OjAwJywKICAgICAgICAgICAgQ2hhbmdlVGltZSA9PiAnMjAxMS0wNi0xMSAxNzoyMjowMCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICA9PiAxNiwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQmFja2VuZCcsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlSUQgICA9PiAxLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ29wZXJhdGlvbmFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgU2VydmljZUlEICA9PiAyLAogICAgICAgICAgICBQYXJlbnRJRCAgID0+IDEsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ015U2VydmljZTo6TXlTdWJTZXJ2aWNlJywKICAgICAgICAgICAgTmFtZVNob3J0ICA9PiAnTXlTdWJTZXJ2aWNlJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICdTb21lIENvbW1lbnQnCiAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMTEtMDItMDggMTU6MDg6MDAnLAogICAgICAgICAgICBDaGFuZ2VUaW1lID0+ICcyMDExLTA2LTExIDE3OjIyOjAwJywKICAgICAgICAgICAgQ3JlYXRlQnkgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICAgICAgID0+IDE2LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdCYWNrZW5kJywKICAgICAgICAgICAgQ3JpdGljYWxpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IDEsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgIyAuLi4KICAgIF07Cgo9Y3V0CgpzdWIgU2VydmljZUxpc3RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlZCByZXN1bHRzCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VMaXN0R2V0OjpWYWxpZDo6JyAuICRQYXJhbXtWYWxpZH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgIyBjcmVhdGUgU1FMIHF1ZXJ5CiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgLiAiLCB0eXBlX2lkLCBjcml0aWNhbGl0eSAiCiMgLS0tCiAgICAgICAgLiAnRlJPTSBzZXJ2aWNlJzsKCiAgICBpZiAoICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2lkIElOICgnIC4gam9pbiAnLCAnLAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSAuICcpJzsKICAgIH0KCiAgICAkU1FMIC49ICcgT1JERVIgQlkgbmFtZSc7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAkU1FMLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgIG15ICVTZXJ2aWNlTmFtZTJJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJVNlcnZpY2VEYXRhOwogICAgICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICA9ICRSb3dbMF07CiAgICAgICAgJFNlcnZpY2VEYXRhe05hbWV9ICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkU2VydmljZURhdGF7VmFsaWRJRH0gICAgPSAkUm93WzJdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDb21tZW50fSAgICA9ICRSb3dbM10gfHwgJyc7CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s0XTsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlQnl9ICAgPSAkUm93WzVdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbNl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1s3XTsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgLS0tCgogICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YSB0byBzZXJ2aWNlIGxpc3QKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgXCVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBidWlsZCBzZXJ2aWNlIGlkIGxvb2t1cCBoYXNoCiAgICAgICAgJFNlcnZpY2VOYW1lMklEeyAkU2VydmljZURhdGF7TmFtZX0gfSA9ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9OwogICAgfQoKICAgIGZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnRpZAogICAgICAgICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0gPSAkU2VydmljZURhdGEtPntOYW1lfTsKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YS0+e05hbWV9ID1+IG17IFxBICguKikgOjogKC4rPykgXHogfXhtcyApIHsKICAgICAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkMTsKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57TmFtZVNob3J0fSA9ICQyOwogICAgICAgICAgICAkU2VydmljZURhdGEtPntQYXJlbnRJRH0gID0gJFNlcnZpY2VOYW1lMklEeyRQYXJlbnROYW1lfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICApOwoKICAgICAgICAjIG1lcmdlIGhhc2gKICAgICAgICBpZiAoJVByZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSA9ICggJXskU2VydmljZURhdGF9LCAlUHJlZmVyZW5jZXMgKTsKICAgICAgICB9CiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICMgZ2V0IGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUsIGNhbGN1bGF0ZWQgZnJvbSByZWxhdGVkIGNvbmZpZyBpdGVtcyBhbmQgY2hpbGQgc2VydmljZXMKICAgICAgICBteSAlTmV3U2VydmljZURhdGEgPSAkU2VsZi0+X1NlcnZpY2VHZXRDdXJyZW50SW5jaWRlbnRTdGF0ZSgKICAgICAgICAgICAgU2VydmljZURhdGEgPT4gJFNlcnZpY2VEYXRhLAogICAgICAgICAgICBQcmVmZXJlbmNlcyA9PiBcJVByZWZlcmVuY2VzLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRTZXJ2aWNlRGF0YSA9IFwlTmV3U2VydmljZURhdGE7CiMgLS0tCiAgICB9CgogICAgaWYgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAjIHNldCBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXEBTZXJ2aWNlTGlzdCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBcQFNlcnZpY2VMaXN0Owp9Cgo9aXRlbSBTZXJ2aWNlR2V0KCkKCnJldHVybiBhIHNlcnZpY2UgYXMgaGFzaAoKUmV0dXJuCiAgICAkU2VydmljZURhdGF7U2VydmljZUlEfQogICAgJFNlcnZpY2VEYXRhe1BhcmVudElEfQogICAgJFNlcnZpY2VEYXRhe05hbWV9CiAgICAkU2VydmljZURhdGF7TmFtZVNob3J0fQogICAgJFNlcnZpY2VEYXRhe1ZhbGlkSUR9CiAgICAkU2VydmljZURhdGF7Q29tbWVudH0KICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfQogICAgJFNlcnZpY2VEYXRhe0NyZWF0ZUJ5fQogICAgJFNlcnZpY2VEYXRhe0NoYW5nZVRpbWV9CiAgICAkU2VydmljZURhdGF7Q2hhbmdlQnl9CiMgLS0tCiMgSVRTTQojIC0tLQogICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0KICAgICRTZXJ2aWNlRGF0YXtUeXBlfQogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSAgICAjIE9ubHkgaWYgSW5jaWRlbnRTdGF0ZSBpcyAxCiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlfSAgICAgICMgT25seSBpZiBJbmNpZGVudFN0YXRlIGlzIDEKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSAgIyBPbmx5IGlmIEluY2lkZW50U3RhdGUgaXMgMQoKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gMTIzLAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwgIyBPcHRpb25hbCwgcmV0dXJucyBDdXJJbmNpU3RhdGUgZXRjLgogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CiMgLS0tCgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTo6U3ViU2VydmljZScsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGVpdGhlciBTZXJ2aWNlSUQgb3IgTmFtZSBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggU2VydmljZUlEIGFuZCBOYW1lIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSAmJiAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciBTZXJ2aWNlSUQgT1IgTmFtZSAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rdXAgdGhlIFNlcnZpY2VJRAogICAgaWYgKCAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlZCByZXN1bHRzCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VHZXQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAjIGFkZCB0aGUgSW5jaWRlbnRTdGF0ZSBwYXJhbWV0ZXIgdG8gdGhlIGNhY2hlIGtleQogICAgJFBhcmFte0luY2lkZW50U3RhdGV9IHx8PSAwOwogICAgJENhY2hlS2V5IC49ICc6OkluY2lkZW50U3RhdGU6OicgLiAkUGFyYW17SW5jaWRlbnRTdGF0ZX07CiMgLS0tCiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBnZXQgc2VydmljZSBmcm9tIGRiCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIC4gIiwgdHlwZV9pZCwgY3JpdGljYWxpdHkgIgojIC0tLQogICAgICAgICAgICAuICdGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNlcnZpY2VEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSAgPSAkUm93WzBdOwogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VEYXRhe1ZhbGlkSUR9ICAgID0gJFJvd1syXTsKICAgICAgICAkU2VydmljZURhdGF7Q29tbWVudH0gICAgPSAkUm93WzNdIHx8ICcnOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s1XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzZdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbN107CiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICRTZXJ2aWNlRGF0YXtUeXBlSUR9ICAgICAgPSAkUm93WzhdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcml0aWNhbGl0eX0gPSAkUm93WzldIHx8ICcnOwojIC0tLQogICAgfQoKICAgICMgY2hlY2sgc2VydmljZQogICAgaWYgKCAhJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIFNlcnZpY2VJRCAoJFBhcmFte1NlcnZpY2VJRH0pISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgc2hvcnQgbmFtZSBhbmQgcGFyZW50aWQKICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9ID0gJFNlcnZpY2VEYXRhe05hbWV9OwogICAgaWYgKCAkU2VydmljZURhdGF7TmFtZX0gPX4gbXsgXEEgKC4qKSA6OiAoLis/KSBceiB9eG1zICkgewogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9ID0gJDI7CgogICAgICAgICMgbG9va3VwIHBhcmVudAogICAgICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICApOwogICAgICAgICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH0gPSAkU2VydmljZUlEOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlU2VydmljZURhdGEgPSAoICVTZXJ2aWNlRGF0YSwgJVByZWZlcmVuY2VzICk7CiAgICB9CiMgLS0tCiMgSVRTTQojIC0tLQogICAgaWYgKCAkUGFyYW17SW5jaWRlbnRTdGF0ZX0gKSB7CiAgICAgICAgIyBnZXQgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwgY2FsY3VsYXRlZCBmcm9tIHJlbGF0ZWQgY29uZmlnIGl0ZW1zIGFuZCBjaGlsZCBzZXJ2aWNlcwogICAgICAgICVTZXJ2aWNlRGF0YSA9ICRTZWxmLT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgICAgICBTZXJ2aWNlRGF0YSA9PiBcJVNlcnZpY2VEYXRhLAogICAgICAgICAgICBQcmVmZXJlbmNlcyA9PiBcJVByZWZlcmVuY2VzLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQojIC0tLQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICk7CgogICAgcmV0dXJuICVTZXJ2aWNlRGF0YTsKfQoKPWl0ZW0gU2VydmljZUxvb2t1cCgpCgpyZXR1cm4gYSBzZXJ2aWNlIG5hbWUgYW5kIGlkCgogICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnU2VydmljZTo6U3ViU2VydmljZScsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTZXJ2aWNlTG9va3VwOjpJRDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgbmFtZSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkUmVzdWx0ID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFJlc3VsdCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+ICRSZXN1bHQsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmIGRlZmluZWQgJENhY2hlOwoKICAgICAgICAjIGxvb2t1cAogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRSZXN1bHQgPSAnJzsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUmVzdWx0ID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJlc3VsdCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgIH0KfQoKPWl0ZW0gU2VydmljZUFkZCgpCgphZGQgYSBzZXJ2aWNlCgogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFBhcmVudElEID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgIENvbW1lbnQgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyAtLS0KIyBJVFNNCiMgLS0tCiMgICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQgVHlwZUlEIENyaXRpY2FsaXR5KSkgewojIC0tLQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBjb21tZW50CiAgICAkUGFyYW17Q29tbWVudH0gfHw9ICcnOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgbmFtZQogICAgaWYgKCAkUGFyYW17TmFtZX0gPX4gbXsgOjogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGFkZCBzZXJ2aWNlISBJbnZhbGlkIFNlcnZpY2UgbmFtZSAnJFBhcmFte05hbWV9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIGZ1bGwgbmFtZQogICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJhbXtOYW1lfTsKCiAgICAjIGdldCBwYXJlbnQgbmFtZQogICAgaWYgKCAkUGFyYW17UGFyZW50SUR9ICkgewogICAgICAgIG15ICRQYXJlbnROYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17UGFyZW50SUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCRQYXJlbnROYW1lKSB7CiAgICAgICAgICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyZW50TmFtZSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZmluZCBleGlzdGluZyBzZXJ2aWNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJEV4aXN0czsKICAgIHdoaWxlICggJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRXhpc3RzID0gMTsKICAgIH0KCiAgICAjIGFkZCBzZXJ2aWNlIHRvIGRhdGFiYXNlCiAgICBpZiAoJEV4aXN0cykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQ2FuXCd0IGFkZCBzZXJ2aWNlISBTZXJ2aWNlIHdpdGggc2FtZSBuYW1lIGFuZCBwYXJlbnQgYWxyZWFkeSBleGlzdHMuJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAojIC0tLQojIElUU00KIyAtLS0KIyAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlICcKIyAgICAgICAgICAgIC4gJyhuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpICcKIyAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2UgJwogICAgICAgICAgICAuICcobmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5LCAnCiAgICAgICAgICAgIC4gJ3R5cGVfaWQsIGNyaXRpY2FsaXR5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCA/LCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17RnVsbE5hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte0NyaXRpY2FsaXR5fSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJFNlcnZpY2VJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAkU2VydmljZUlEOwp9Cgo9aXRlbSBTZXJ2aWNlVXBkYXRlKCkKCnVwZGF0ZSBhbiBleGlzdGluZyBzZXJ2aWNlCgogICAgbXkgJFRydWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFBhcmVudElEICA9PiAxLCAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgIENvbW1lbnQgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIC0tLQojIElUU00KIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VJRCBOYW1lIFZhbGlkSUQgVXNlcklEIFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyAtLS0KICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBjb21tZW50CiAgICAkUGFyYW17Q29tbWVudH0gfHw9ICcnOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgbmFtZQogICAgaWYgKCAkUGFyYW17TmFtZX0gPX4gbXsgOjogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IHVwZGF0ZSBzZXJ2aWNlISBJbnZhbGlkIFNlcnZpY2UgbmFtZSAnJFBhcmFte05hbWV9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG9sZCBuYW1lIG9mIHNlcnZpY2UKICAgIG15ICRPbGRTZXJ2aWNlTmFtZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17U2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJE9sZFNlcnZpY2VOYW1lICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIHNlcnZpY2UhIFNlcnZpY2UgJyRQYXJhbXtTZXJ2aWNlSUR9JyBkb2VzIG5vdCBleGlzdC4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIGZ1bGwgbmFtZQogICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJhbXtOYW1lfTsKCiAgICAjIGdldCBwYXJlbnQgbmFtZQogICAgaWYgKCAkUGFyYW17UGFyZW50SUR9ICkgewoKICAgICAgICAjIGxvb2t1cCBzZXJ2aWNlCiAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRQYXJlbnROYW1lKSB7CiAgICAgICAgICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyZW50TmFtZSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrLCBpZiBzZWxlY3RlZCBwYXJlbnQgd2FzIGEgY2hpbGQgb2YgdGhpcyBzZXJ2aWNlCiAgICAgICAgaWYgKCAkUGFyYW17RnVsbE5hbWV9ID1+IG17IFxBICggXFEkT2xkU2VydmljZU5hbWVcRSApIDo6IH14bXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdDYW5cJ3QgdXBkYXRlIHNlcnZpY2UhIEludmFsaWQgcGFyZW50IHdhcyBzZWxlY3RlZC4nCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBmaW5kIGV4aXN0cyBzZXJ2aWNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJEV4aXN0czsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSBuZSAkUm93WzBdICkgewogICAgICAgICAgICAkRXhpc3RzID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NhblwndCB1cGRhdGUgc2VydmljZSEgU2VydmljZSB3aXRoIHNhbWUgbmFtZSBhbmQgcGFyZW50IGFscmVhZHkgZXhpc3RzLicKICAgICAgICApOwogICAgICAgIHJldHVybjsKCiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiMgLS0tCiMgSVRTTQojIC0tLQojICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKIyAgICAgICAgICAgIC4gJyBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/IFdIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17U2VydmljZUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKICAgICAgICAgICAgLiAnIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8sIHR5cGVfaWQgPSA/LCBjcml0aWNhbGl0eSA9ID8nCiAgICAgICAgICAgIC4gJyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0Z1bGxOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1R5cGVJRH0sIFwkUGFyYW17Q3JpdGljYWxpdHl9LCBcJFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgXSwKIyAtLS0KICAgICk7CgogICAgbXkgJExpa2VTZXJ2aWNlID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkT2xkU2VydmljZU5hbWUsICdMaWtlJyApIC4gJzo6JSc7CgogICAgIyBmaW5kIGFsbCBjaGlsZHMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSBMSUtFID8iLAogICAgICAgIEJpbmQgPT4gWyBcJExpa2VTZXJ2aWNlIF0sCiAgICApOwoKICAgIG15IEBDaGlsZHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVDaGlsZDsKICAgICAgICAkQ2hpbGR7U2VydmljZUlEfSA9ICRSb3dbMF07CiAgICAgICAgJENoaWxke05hbWV9ICAgICAgPSAkUm93WzFdOwogICAgICAgIHB1c2ggQENoaWxkcywgXCVDaGlsZDsKICAgIH0KCiAgICAjIHVwZGF0ZSBjaGlsZHMKICAgIGZvciBteSAkQ2hpbGQgKEBDaGlsZHMpIHsKICAgICAgICAkQ2hpbGQtPntOYW1lfSA9fiBzeyBcQSAoIFxRJE9sZFNlcnZpY2VOYW1lXEUgKSA6OiB9eyRQYXJhbXtGdWxsTmFtZX06On14bXM7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgID0+ICdVUERBVEUgc2VydmljZSBTRVQgbmFtZSA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2hpbGQtPntOYW1lfSwgXCRDaGlsZC0+e1NlcnZpY2VJRH0gXSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU2VydmljZVNlYXJjaCgpCgpyZXR1cm4gc2VydmljZSBpZHMgYXMgYW4gYXJyYXkKCiAgICBteSBAU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVNlYXJjaCgKICAgICAgICBOYW1lICAgPT4gJ1NlcnZpY2UgTmFtZScsICMgKG9wdGlvbmFsKQogICAgICAgIExpbWl0ICA9PiAxMjIsICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMTAwMAogICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSURzICAgICAgID0+IDIsCiAgICAgICAgQ3JpdGljYWxpdGllcyA9PiBbICcyIGxvdycsICczIG5vcm1hbCcgXSwKIyAtLS0KICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBsaW1pdAogICAgJFBhcmFte0xpbWl0fSB8fD0gMTAwMDsKCiAgICAjIGNyZWF0ZSBzcWwgcXVlcnkKICAgIG15ICRTUUwKICAgICAgICA9ICJTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIHZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkpfSApIjsKCiAgICBteSBAQmluZDsKCiAgICBpZiAoICRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXtOYW1lfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte05hbWV9LCAnTGlrZScgKTsKCiAgICAgICAgIyByZXBsYWNlICogd2l0aCAlIGFuZCBjbGVhbiB0aGUgc3RyaW5nCiAgICAgICAgJFBhcmFte05hbWV9ID1+IHN7IFwqKyB9eyV9eG1zZzsKICAgICAgICAkUGFyYW17TmFtZX0gPX4gc3sgJSsgfXslfXhtc2c7CiAgICAgICAgbXkgJExpa2VTdHJpbmcgPSAnJScgLiAkUGFyYW17TmFtZX0gLiAnJSc7CiAgICAgICAgcHVzaCBAQmluZCwgXCRMaWtlU3RyaW5nOwoKICAgICAgICAkU1FMIC49ICIgQU5EIG5hbWUgTElLRSA/IjsKICAgIH0KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAjIGFkZCB0eXBlIGlkcwogICAgaWYgKCAkUGFyYW17VHlwZUlEc30gJiYgcmVmICRQYXJhbXtUeXBlSURzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtUeXBlSURzfSB9ICkgewoKICAgICAgICAjIHF1b3RlIGFzIGludGVnZXIKICAgICAgICBmb3IgbXkgJFR5cGVJRCAoIEB7ICRQYXJhbXtUeXBlSURzfSB9ICkgewogICAgICAgICAgICAkVHlwZUlEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkVHlwZUlELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICRTUUwgLj0gIiBBTkQgdHlwZV9pZCBJTiAoIiAuIGpvaW4oJywgJywgQHsgJFBhcmFte1R5cGVJRHN9IH0pIC4gIikgIjsKICAgIH0KCiAgICAjIGFkZCBjcml0aWNhbGl0aWVzCiAgICBpZiAoJFBhcmFte0NyaXRpY2FsaXRpZXN9ICYmIHJlZiAkUGFyYW17Q3JpdGljYWxpdGllc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17Q3JpdGljYWxpdGllc30gfSApIHsKCiAgICAgICAgIyBxdW90ZSBhbmQgd3JhcCBpbiBzaW5nbGUgcXVvdGVzCiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9ICkgewogICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAiJyIgLiAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRDcml0aWNhbGl0eSApIC4gIiciOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiQU5EIGNyaXRpY2FsaXR5IElOICgiIC4gam9pbignLCAnLCBAeyAkUGFyYW17Q3JpdGljYWxpdGllc30gfSkgLiAiKSAiOwogICAgfQojIC0tLQoKICAgICRTUUwgLj0gJyBPUkRFUiBCWSBuYW1lJzsKCiAgICAjIHNlYXJjaCBzZXJ2aWNlIGluIGRiCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBcQEJpbmQsCiAgICApOwoKICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2VydmljZUxpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIEBTZXJ2aWNlTGlzdDsKfQoKPWl0ZW0gQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoKQoKcmV0dXJucyBhIGxpc3Qgb2YgY3VzdG9tZXJ1c2VyL3NlcnZpY2UgbWVtYmVycwoKICAgIFNlcnZpY2VJRDogc2VydmljZSBpZAogICAgQ3VzdG9tZXJVc2VyTG9naW46IGN1c3RvbWVyIHVzZXIgbG9naW4KICAgIERlZmF1bHRTZXJ2aWNlczogYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSBkZWZhdWx0IHNlcnZpY2VzCgogICAgUmVzdWx0OiBIQVNIIC0+IHJldHVybnMgYSBoYXNoIG9mIGtleSA9PiBzZXJ2aWNlIGlkLCB2YWx1ZSA9PiBzZXJ2aWNlIG5hbWUKICAgICAgICAgICAgTmFtZSAtPiByZXR1cm5zIGFuIGFycmF5IG9mIHVzZXIgbmFtZXMKICAgICAgICAgICAgSUQgICAtPiByZXR1cm5zIGFuIGFycmF5IG9mIHVzZXIgaWRzCgogICAgRXhhbXBsZSAoZ2V0IHNlcnZpY2VzIG9mIGN1c3RvbWVyIHVzZXIpOgoKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnVGVzdCcsCiAgICAgICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCiAgICApOwoKICAgIEV4YW1wbGUgKGdldCBjdXN0b21lciB1c2VyIG9mIHNlcnZpY2UpOgoKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJElELAogICAgICAgIFJlc3VsdCAgICA9PiAnSEFTSCcsCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtSZXN1bHR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBSZXN1bHQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IChvbmx5IDEgb3IgMCBpcyBhbGxvd2VkIHRvIGNvcnJlY3RseSBzZXQgdGhlIGNhY2hlIGtleSkKICAgIGlmICggIWRlZmluZWQgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gfHwgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gKSB7CiAgICAgICAgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gPSAxOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30gPSAwOwogICAgfQoKICAgICMgZ2V0IG9wdGlvbnMgZm9yIGRlZmF1bHQgc2VydmljZXMgZm9yIHVua25vd24gY3VzdG9tZXJzCiAgICBteSAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIKICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpTZXJ2aWNlOjpEZWZhdWx0OjpVbmtub3duQ3VzdG9tZXInKTsKICAgIGlmICgKICAgICAgICAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIKICAgICAgICAmJiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfQogICAgICAgICYmICEkUGFyYW17U2VydmljZUlEfQogICAgICAgICYmICEkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59CiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gPSAnPERFRkFVTFQ+JzsKICAgIH0KCiAgICAjIGNoZWNrIG1vcmUgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIEN1c3RvbWVyVXNlckxvZ2luIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgY2FjaGUga2V5CiAgICBteSAkQ2FjaGVLZXkgPSAnQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3Q6OicgLiAkUGFyYW17UmVzdWx0fSAuICc6OicKICAgICAgICAuICdEZWZhdWx0U2VydmljZXM6OicgLiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSAuICc6Oic7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICRDYWNoZUtleSAuPSAnU2VydmljZUlEOjonIC4gJFBhcmFte1NlcnZpY2VJRH07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gKSB7CiAgICAgICAgJENhY2hlS2V5IC49ICdDdXN0b21lclVzZXJMb2dpbjo6JyAuICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn07CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICBpZiAoICRQYXJhbXtSZXN1bHR9IGVxICdIQVNIJyApIHsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIEB7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdBUlJBWSc7CiAgICB9CgogICAgIyBkYiBxdW90ZQogICAgZm9yICggc29ydCBrZXlzICVQYXJhbSApIHsKICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JF99ICk7CiAgICB9CiAgICBmb3IgKHF3KFNlcnZpY2VJRCkpIHsKICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JF99LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIHNxbAogICAgbXkgJURhdGE7CiAgICBteSBARGF0YTsKICAgIG15ICRTUUwgPSAnU0VMRUNUIHNjdS5zZXJ2aWNlX2lkLCBzY3UuY3VzdG9tZXJfdXNlcl9sb2dpbiwgcy5uYW1lICcKICAgICAgICAuICcgRlJPTSAnCiAgICAgICAgLiAnIHNlcnZpY2VfY3VzdG9tZXJfdXNlciBzY3UsIHNlcnZpY2UgcycKICAgICAgICAuICcgV0hFUkUgJwogICAgICAgIC4gIiBzLnZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkpfSApIEFORCAiCiAgICAgICAgLiAnIHMuaWQgPSBzY3Uuc2VydmljZV9pZCBBTkQgJzsKCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICRTUUwgLj0gIiBzY3Uuc2VydmljZV9pZCA9ICRQYXJhbXtTZXJ2aWNlSUR9IjsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkU1FMIC49ICIgc2N1LmN1c3RvbWVyX3VzZXJfbG9naW4gPSAnJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSciOwogICAgfQoKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKCBTUUwgPT4gJFNRTCApOwoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG15ICRWYWx1ZSA9ICcnOwogICAgICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICREYXRheyAkUm93WzFdIH0gPSAkUm93WzBdOwogICAgICAgICAgICAkVmFsdWUgPSAkUm93WzBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMl07CiAgICAgICAgfQogICAgfQogICAgaWYgKAogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0KICAgICAgICAmJiAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59IG5lICc8REVGQVVMVD4nCiAgICAgICAgJiYgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30KICAgICAgICAmJiAha2V5cyglRGF0YSkKICAgICAgICApCiAgICB7CiAgICAgICAgJURhdGEgPSAkU2VsZi0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiByZXN1bHQKICAgIGlmICggJFBhcmFte1Jlc3VsdH0gZXEgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVEYXRhLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVEYXRhOwogICAgfQogICAgaWYgKCAkUGFyYW17UmVzdWx0fSBlcSAnTmFtZScgKSB7CiAgICAgICAgQERhdGEgPSB2YWx1ZXMgJURhdGE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBARGF0YSA9IGtleXMgJURhdGE7CiAgICB9CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBEYXRhLAogICAgKTsKICAgIHJldHVybiBARGF0YTsKfQoKPWl0ZW0gQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgpCgp0byBhZGQgYSBtZW1iZXIgdG8gYSBzZXJ2aWNlCgppZiAnQWN0aXZlJyBpcyAwLCB0aGUgY3VzdG9tZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzZXJ2aWNlCgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJ1Rlc3QxJywKICAgICAgICBTZXJ2aWNlSUQgICAgICAgICA9PiA2LAogICAgICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEN1c3RvbWVyVXNlckxvZ2luIFNlcnZpY2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGV4aXN0aW5nIHJlbGF0aW9uCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgY3VzdG9tZXJfdXNlcl9sb2dpbiA9ID8gQU5EIHNlcnZpY2VfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0sIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgKTsKCiAgICAjIHJldHVybiBpZiByZWxhdGlvbiBpcyBub3QgYWN0aXZlCiAgICBpZiAoICEkUGFyYW17QWN0aXZlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IHJlbGF0aW9uCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2VfY3VzdG9tZXJfdXNlciAnCiAgICAgICAgICAgIC4gJyhjdXN0b21lcl91c2VyX2xvZ2luLCBzZXJ2aWNlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0sIFwkUGFyYW17U2VydmljZUlEfSwgXCRQYXJhbXtVc2VySUR9IF0KICAgICk7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwogICAgcmV0dXJuICRTdWNjZXNzOwp9Cgo9aXRlbSBTZXJ2aWNlUHJlZmVyZW5jZXNTZXQoKQoKc2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKCiAgICAkU2VydmljZU9iamVjdC0+U2VydmljZVByZWZlcmVuY2VzU2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgS2V5ICAgICAgID0+ICdVc2VyQ29tbWVudCcsCiAgICAgICAgVmFsdWUgICAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VQcmVmZXJlbmNlc1NldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoQF8pOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTZXJ2aWNlUHJlZmVyZW5jZXNHZXQoKQoKZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZVByZWZlcmVuY2VzR2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoQF8pOwp9Cgo9aXRlbSBTZXJ2aWNlUGFyZW50c0dldCgpCgpyZXR1cm4gYW4gb3JkZXJlZCBsaXN0IGFsbCBwYXJlbnQgc2VydmljZSBJRHMgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIGZyb20gdGhlIHJvb3QgcGFyZW50IHRvIHRoZQpjdXJyZW50IHNlcnZpY2UgcGFyZW50CgogICAgbXkgJFNlcnZpY2VQYXJlbnRzTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm5zCgogICAgJFNlcnZpY2VQYXJlbnRzTGlzdCA9IFsgMSwgMiwgLi4uXTsKCj1jdXQKCnN1YiBTZXJ2aWNlUGFyZW50c0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVXNlcklEIFNlcnZpY2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkICROZWVkZWQhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHJlYWQgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdTZXJ2aWNlUGFyZW50c0dldDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmIHJlZiAkQ2FjaGU7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZXMKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZWxmLT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgYSBzZXJ2aWNlIGxvb2t1cCB0YWJsZQogICAgbXkgJVNlcnZpY2VMb29rdXA7CiAgICBTRVJWSUNFOgogICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKICAgICAgICBuZXh0IFNFUlZJQ0UgaWYgISRTZXJ2aWNlRGF0YTsKICAgICAgICBuZXh0IFNFUlZJQ0UgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCRTZXJ2aWNlRGF0YSk7CiAgICAgICAgbmV4dCBTRVJWSUNFIGlmICEkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9OwoKICAgICAgICAkU2VydmljZUxvb2t1cHsgJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSB9ID0gJFNlcnZpY2VEYXRhOwogICAgfQoKICAgICMgZXhpdCBpZiBTZXJ2aWNlSUQgaXMgaW52YWxpZAogICAgcmV0dXJuIGlmICEkU2VydmljZUxvb2t1cHsgJFBhcmFte1NlcnZpY2VJRH0gfTsKCiAgICAjIHRvIHN0b3JlIHRoZSByZXR1cm4gc3RydWN0dXJlCiAgICBteSBAU2VydmljZVBhcmVudHM7CgogICAgIyBnZXQgdGhlIFNlcnZpY2VQYXJlbnRJRCBmcm9tIHRoZSByZXF1ZXN0ZWQgc2VydmljZQogICAgbXkgJFNlcnZpY2VQYXJlbnRJRCA9ICRTZXJ2aWNlTG9va3VweyAkUGFyYW17U2VydmljZUlEfSB9LT57UGFyZW50SUR9OwoKICAgICMgZ2V0IGFsbCBwYXJ0ZW50cyBmb3IgdGhlIHJlcXVlc3RlZCBzZXJ2aWNlCiAgICB3aGlsZSAoJFNlcnZpY2VQYXJlbnRJRCkgewoKICAgICAgICAjIGFkZCBzZXJ2aWNlIHBhcmVudCBJRCB0byB0aGUgcmV0dXJuIHN0cnVjdHVyZQogICAgICAgIHB1c2ggQFNlcnZpY2VQYXJlbnRzLCAkU2VydmljZVBhcmVudElEOwoKICAgICAgICAjIHNldCBuZXh0IFNlcnZpY2VQYXJlbnRJRCAodGhlIHBhcmVudCBvZiB0aGUgY3VycmVudCBwYXJlbnQpCiAgICAgICAgJFNlcnZpY2VQYXJlbnRJRCA9ICRTZXJ2aWNlTG9va3VweyRTZXJ2aWNlUGFyZW50SUR9LT57UGFyZW50SUR9IHx8IDA7CgogICAgfQoKICAgICMgcmV2ZXJzZSB0aGUgcmV0dXJuIGFycmF5IHRvIGdldCB0aGUgbGlzdCBvcmRlcmVkIGZyb20gb2xkIHRvIHlvdW5nIChpbiBwYXJlbnQgY29udGV4dCkKICAgIG15IEBEYXRhID0gcmV2ZXJzZSBAU2VydmljZVBhcmVudHM7CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQERhdGEsCiAgICApOwoKICAgIHJldHVybiBcQERhdGE7Cn0KCj1pdGVtIEdldEFsbEN1c3RvbVNlcnZpY2VzKCkKCmdldCBhbGwgY3VzdG9tIHNlcnZpY2VzIG9mIG9uZSB1c2VyCgogICAgbXkgQFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkdldEFsbEN1c3RvbVNlcnZpY2VzKCBVc2VySUQgPT4gMTIzICk7Cgo9Y3V0CgpzdWIgR2V0QWxsQ3VzdG9tU2VydmljZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldEFsbEN1c3RvbVNlcnZpY2VzOjonIC4gJFBhcmFte1VzZXJJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIHNlYXJjaCBhbGwgY3VzdG9tIHNlcnZpY2VzCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBzZXJ2aWNlX2lkCiAgICAgICAgICAgIEZST00gcGVyc29uYWxfc2VydmljZXMKICAgICAgICAgICAgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAU2VydmljZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2VydmljZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAU2VydmljZUlEcywKICAgICk7CgogICAgcmV0dXJuIEBTZXJ2aWNlSURzOwp9CiMgLS0tCiMgSVRTTQojIC0tLQoKPWl0ZW0gX1NlcnZpY2VHZXRDdXJyZW50SW5jaWRlbnRTdGF0ZSgpCgpSZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSBvcmlnaW5hbCBzZXJ2aWNlIGRhdGEsCmVuaGFuY2VkIHdpdGggYWRkaXRpb25hbCBzZXJ2aWNlIGRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUsCmJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gaXRlbXMgYW5kIG90aGVyIHNlcnZpY2VzLgoKICAgICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gXCVQcmVmZXJlbmNlcywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VEYXRhIFByZWZlcmVuY2VzIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VEYXRhIFByZWZlcmVuY2VzKSkgewogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgbG9jYWwgY29waWVzCiAgICBteSAlU2VydmljZURhdGEgPSAleyAkUGFyYW17U2VydmljZURhdGF9IH07CiAgICBteSAlUHJlZmVyZW5jZXMgPSAleyAkUGFyYW17UHJlZmVyZW5jZXN9IH07CgogICAgIyBnZXQgc2VydmljZSB0eXBlIGxpc3QKICAgIG15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKICAgICRTZXJ2aWNlRGF0YXtUeXBlfSA9ICRTZXJ2aWNlVHlwZUxpc3QtPnsgJFNlcnZpY2VEYXRhe1R5cGVJRH0gfSB8fCAnJzsKCiAgICAjIHNldCBkZWZhdWx0IGluY2lkZW50IHN0YXRlIHR5cGUKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICdvcGVyYXRpb25hbCc7CgogICAgIyBnZXQgSVRTTSBtb2R1bGUgZGlyZWN0b3J5CiAgICBteSAkQ29uZmlnSXRlbU1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gJy9LZXJuZWwvU3lzdGVtL0lUU01Db25maWdJdGVtLnBtJzsKCiAgICAjIGNoZWNrIGlmIElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudCBwYWNrYWdlIGlzIGluc3RhbGxlZAogICAgaWYgKCAtZSAkQ29uZmlnSXRlbU1vZHVsZSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBhIHByZWZlcmVuY2Ugc2V0dGluZyBmb3IgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgZXhpc3RzCiAgICAgICAgaWYgKCAkUHJlZmVyZW5jZXN7Q3VySW5jaVN0YXRlVHlwZUZyb21DSXN9ICkgewoKICAgICAgICAgICAgIyBzZXQgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZyb20gc2VydmljZSBwcmVmZXJlbmNlcyAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRQcmVmZXJlbmNlc3tDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc307CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgcHJlZmVyZW5jZXMgc2V0dGluZyBmb3IgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IGluY2lkZW50IGxpbmsgdHlwZXMgYW5kIGRpcmVjdGlvbnMgZnJvbSBjb25maWcKICAgICAgICAgICAgbXkgJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24nKTsKCiAgICAgICAgICAgICMgdG8gc3RvcmUgYWxsIGxpbmtlZCBjb25maWcgaXRlbSBpZHMgb2YgdGhpcyBzZXJ2aWNlIChmb3IgYWxsIGNvbmZpZ3VyZWQgbGluayB0eXBlcykKICAgICAgICAgICAgbXkgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHM7CgogICAgICAgICAgICBMSU5LVFlQRToKICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbiB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBkaXJlY3Rpb24KICAgICAgICAgICAgICAgIG15ICRMaW5rRGlyZWN0aW9uID0gJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24tPnskTGlua1R5cGV9OwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSB0aGUgbGluayBkaXJlY3Rpb24sIGFzIHRoaXMgaXMgdGhlIHBlcnNwZWN0aXZlIGZyb20gdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICMgbm8gbmVlZCB0byByZXZlcnNlIGlmIGRpcmVjdGlvbiBpcyAnQm90aCcKICAgICAgICAgICAgICAgIGlmICggJExpbmtEaXJlY3Rpb24gZXEgJ1NvdXJjZScgKSB7CiAgICAgICAgICAgICAgICAgICAgJExpbmtEaXJlY3Rpb24gPSAnVGFyZ2V0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJExpbmtEaXJlY3Rpb24gZXEgJ1RhcmdldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJExpbmtEaXJlY3Rpb24gPSAnU291cmNlJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGZpbmQgYWxsIGxpbmtlZCBjb25maWcgaXRlbXMgd2l0aCB0aGlzIGxpbmt0eXBlIGFuZCBkaXJlY3Rpb24KICAgICAgICAgICAgICAgIG15ICVMaW5rZWRDb25maWdJdGVtSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0tleUxpc3RXaXRoRGF0YSgKICAgICAgICAgICAgICAgICAgICBPYmplY3QxICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgIEtleTEgICAgICA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbiA9PiAkTGlua0RpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgbGlua2VkIGNvbmZpZyBpdGVtcwogICAgICAgICAgICAgICAgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMgPSAoICVBbGxMaW5rZWRDb25maWdJdGVtSURzLCAlTGlua2VkQ29uZmlnSXRlbUlEcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaW52ZXN0aWdhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgZWFjaCBjb25maWcgaXRlbQogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICVBbGxMaW5rZWRDb25maWdJdGVtSURzICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkQWxsTGlua2VkQ29uZmlnSXRlbUlEc3skQ29uZmlnSXRlbUlEfTsKCiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJEZXBsU3RhdGVUeXBlfSBuZSAncHJvZHVjdGl2ZSc7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBtdXN0IGJlIHNldCB0byAnd2FybmluZycKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ3dhcm5pbmcnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ2luY2lkZW50JwogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnaW5jaWRlbnQnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICdpbmNpZGVudCc7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICAgICAgICAgJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdGhlIHByZWZlcmVuY2VzIGxvY2FsbHkKICAgICAgICAgICAgJFByZWZlcmVuY2Vze0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzfSA9ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfTsKICAgICAgICB9CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSB0aGUgc3RhdGUgb2YgYWxsIGNoaWxkIHNlcnZpY2VzCiAgICBpZiAoICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnICkgewoKICAgICAgICAjIGNyZWF0ZSB0aGUgdmFsaWQgc3RyaW5nCiAgICAgICAgbXkgJFZhbGlkSURTdHJpbmcgPSBqb2luIHF7LCB9LCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgIyBwcmVwYXJlIG5hbWUKICAgICAgICBteSAkTmFtZSA9ICRTZXJ2aWNlRGF0YXtOYW1lfTsKICAgICAgICAkTmFtZSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJE5hbWUsICdMaWtlJyApOwoKICAgICAgICAjIGdldCBsaXN0IG9mIGFsbCB2YWxpZCBjaGlsZHMKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzZXJ2aWNlICIKICAgICAgICAgICAgICAgIC4gIldIRVJFIG5hbWUgTElLRSAnIiAuICROYW1lIC4gIjo6JScgIgogICAgICAgICAgICAgICAgLiAiQU5EIHZhbGlkX2lkIElOICgiIC4gJFZhbGlkSURTdHJpbmcgLiAiKSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBmaW5kIGxlbmd0aCBvZiBjaGlsZHMgcHJlZml4CiAgICAgICAgbXkgJFByZWZpeExlbmd0aCA9IGxlbmd0aCAiJFNlcnZpY2VEYXRhe05hbWV9OjoiOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSBAQ2hpbGRJRHM7CiAgICAgICAgUk9XOgogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgY2hpbGQgcGFydAogICAgICAgICAgICBteSAkQ2hpbGRQYXJ0ID0gc3Vic3RyICRSb3dbMV0sICRQcmVmaXhMZW5ndGg7CgogICAgICAgICAgICBuZXh0IFJPVyBpZiAkQ2hpbGRQYXJ0ID1+IG17IDo6IH14bXM7CgogICAgICAgICAgICBwdXNoIEBDaGlsZElEcywgJFJvd1swXTsKICAgICAgICB9CgogICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEBDaGlsZElEcyApIHsKCiAgICAgICAgICAgICMgZ2V0IGRhdGEgb2YgY2hpbGQgc2VydmljZQogICAgICAgICAgICBteSAlQ2hpbGRTZXJ2aWNlRGF0YSA9ICRTZWxmLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRUlEIGlmICRDaGlsZFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCc7CgogICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAnd2FybmluZyc7CiAgICAgICAgICAgIGxhc3QgU0VSVklDRUlEOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlZmluZSBkZWZhdWx0IGluY2lkZW50IHN0YXRlcwogICAgbXkgJURlZmF1bHRJbmNpU3RhdGVzID0gKAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ1dhcm5pbmcnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdJbmNpZGVudCcsCiAgICApOwoKICAgICMgZ2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBsaXN0IG9mIHRoaXMgdHlwZQogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgICA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICVSZXZlcnNlSW5jaVN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJEluY2lTdGF0ZUxpc3QgfTsKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0KICAgICAgICA9ICRSZXZlcnNlSW5jaVN0YXRlTGlzdHsgJERlZmF1bHRJbmNpU3RhdGVzeyAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gfSB9OwoKICAgICMgZmFsbGJhY2sgaWYgdGhlIGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgaXMgZGVhY3RpdmF0ZWQKICAgIGlmICggISRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0gKSB7CiAgICAgICAgbXkgQFNvcnRlZEluY2lMaXN0ID0gc29ydCBrZXlzICV7ICRJbmNpU3RhdGVMaXN0IH07CiAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSA9ICRTb3J0ZWRJbmNpTGlzdFswXTsKICAgIH0KCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkSW5jaVN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0sCiAgICApOwoKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGV9ICAgICA9ICRJbmNpU3RhdGUtPntOYW1lfTsKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRJbmNpU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAlU2VydmljZURhdGEgPSAoJVNlcnZpY2VEYXRhLCAlUHJlZmVyZW5jZXMpOwoKICAgIHJldHVybiAlU2VydmljZURhdGE7Cn0KCiMgLS0tCgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU0xBLnBtIC0gYWxsIHNsYSBmdW5jdGlvbnMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMWIyNjFhZDA2ZjhkZTQxOTA1MTBmMjhiOGEyNjBiZDYyNjY3MDVjYy9LZXJuZWwvU3lzdGVtL1NMQS5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6U0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpTTEEgLSBzbGEgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBzbGEgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRTTEFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbmZpZ3VyZWQgcHJlZmVyZW5jZXMgb2JqZWN0CiAgICBteSAkR2VuZXJhdG9yTW9kdWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTTEE6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OlNMQTo6UHJlZmVyZW5jZXNEQic7CgogICAgIyBnZXQgcHJlZmVyZW5jZXMgb2JqZWN0CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJEdlbmVyYXRvck1vZHVsZSk7CgogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ1NMQSc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFNMQUxpc3QoKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHNsYXMKCiAgICBteSAlU0xBTGlzdCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+IDEsICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZCAgICAgPT4gMCwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU0xBTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhZGQgU2VydmljZUlECiAgICBteSAlU1FMVGFibGU7CiAgICAkU1FMVGFibGV7c2xhfSA9ICdzbGEgcyc7CiAgICBteSBAU1FMV2hlcmU7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17U2VydmljZUlEfSwgJ0ludGVnZXInICk7CgogICAgICAgICRTUUxUYWJsZXtzZXJ2aWNlfSA9ICdzZXJ2aWNlX3NsYSByJzsKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgInMuaWQgPSByLnNsYV9pZCBBTkQgci5zZXJ2aWNlX2lkID0gJFBhcmFte1NlcnZpY2VJRH0iOwogICAgfQoKICAgICMgYWRkIHZhbGlkIHBhcnQKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKCiAgICAgICAgIyBnZXQgdmFsaWQgb2JqZWN0CiAgICAgICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CgogICAgICAgICMgY3JlYXRlIHRoZSB2YWxpZCBsaXN0CiAgICAgICAgbXkgJFZhbGlkSURzID0gam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCk7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAicy52YWxpZF9pZCBJTiAoICRWYWxpZElEcyApIjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgdGFibGUgYW5kIHdoZXJlIHN0cmluZ3MKICAgIG15ICRUYWJsZVN0cmluZyA9IGpvaW4gcXssIH0sIHZhbHVlcyAlU1FMVGFibGU7CiAgICBteSAkV2hlcmVTdHJpbmcgPSBAU1FMV2hlcmUgPyAnIFdIRVJFICcgLiBqb2luIHF7IEFORCB9LCBAU1FMV2hlcmUgOiAnJzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHMuaWQsIHMubmFtZSBGUk9NICRUYWJsZVN0cmluZyAkV2hlcmVTdHJpbmciLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTTEFMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQUxpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuICVTTEFMaXN0Owp9Cgo9aXRlbSBTTEFHZXQoKQoKUmV0dXJucyBhbiBTTEEgYXMgYSBoYXNoCgogICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgU0xBSUQgID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgIG15ICVTTEFEYXRhID0gKAogICAgICAgICAgJ1NMQUlEJyAgICAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICdOYW1lJyAgICAgICAgICAgICAgICA9PiAnRGlhbW9uZCBQYWNpZmljIC0gUzInLAogICAgICAgICAgJ0NhbGVuZGFyJyAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICdGaXJzdFJlc3BvbnNlVGltZScgICA9PiAnNjAnLCAgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ0ZpcnN0UmVzcG9uc2VOb3RpZnknID0+ICc3MCcsICAjIGluIHBlcmNlbnQKICAgICAgICAgICdVcGRhdGVUaW1lJyAgICAgICAgICA9PiAnMzYwJywgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ1VwZGF0ZU5vdGlmeScgICAgICAgID0+ICc3MCcsICAjIGluIHBlcmNlbnQKICAgICAgICAgICdTb2x1dGlvblRpbWUnICAgICAgICA9PiAnOTYwJywgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ1NvbHV0aW9uTm90aWZ5JyAgICAgID0+ICc4MCcsICAjIGluIHBlcmNlbnQKICAgICAgICAgICdTZXJ2aWNlSURzJyAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc3JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICdWYWxpZElEJyAgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAnQ29tbWVudCcgICAgICAgICAgICAgPT4gJ1NvbWUgQ29tbWVudCcsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgJ1R5cGVJRCcgICAgICAgICAgICAgICAgICA9PiAnNScsCiAgICAgICAgICAnVHlwZScgICAgICAgICAgICAgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAnTWluVGltZUJldHdlZW5JbmNpZGVudHMnID0+ICc0MDAwJywgICMgaW4gbWludXRlcwojIC0tLQogICAgICAgICAgJ0NyZWF0ZUJ5JyAgICAgICAgICAgID0+ICc5MycsCiAgICAgICAgICAnQ3JlYXRlVGltZScgICAgICAgICAgPT4gJzIwMTEtMDYtMTYgMjI6NTQ6NTQnLAogICAgICAgICAgJ0NoYW5nZUJ5JyAgICAgICAgICAgID0+ICc5MycsCiAgICAgICAgICAnQ2hhbmdlVGltZScgICAgICAgICAgPT4gJzIwMTEtMDYtMTYgMjI6NTQ6NTQnLAogICAgKTsKCj1jdXQKCnN1YiBTTEFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTTEFHZXQ6OicgLiAkUGFyYW17U0xBSUR9OwogICAgbXkgJENhY2hlZCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJENhY2hlS2V5LAogICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgQ2FjaGVJbkJhY2tlbmQgPT4gMCwKICAgICk7CgogICAgaWYgKCByZWYgJENhY2hlZCBlcSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICV7JENhY2hlZH07CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBzbGEgZnJvbSBkYgogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUsIHVwZGF0ZV9ub3RpZnksIHNvbHV0aW9uX3RpbWUsIHNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgICAgICAuICd2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJwojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgLiAnLCB0eXBlX2lkLCBtaW5fdGltZV9iZXRfaW5jaWRlbnRzICcKIyAtLS0KICAgICAgICAgICAgLiAnRlJPTSBzbGEgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTTEFJRH0sCiAgICAgICAgXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTTEFEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQURhdGF7U0xBSUR9ICAgICAgICAgICAgICAgPSAkUm93WzBdOwogICAgICAgICRTTEFEYXRhe05hbWV9ICAgICAgICAgICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkU0xBRGF0YXtDYWxlbmRhcn0gICAgICAgICAgICA9ICRSb3dbMl0gfHwgJyc7CiAgICAgICAgJFNMQURhdGF7Rmlyc3RSZXNwb25zZVRpbWV9ICAgPSAkUm93WzNdOwogICAgICAgICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VOb3RpZnl9ID0gJFJvd1s0XTsKICAgICAgICAkU0xBRGF0YXtVcGRhdGVUaW1lfSAgICAgICAgICA9ICRSb3dbNV07CiAgICAgICAgJFNMQURhdGF7VXBkYXRlTm90aWZ5fSAgICAgICAgPSAkUm93WzZdOwogICAgICAgICRTTEFEYXRhe1NvbHV0aW9uVGltZX0gICAgICAgID0gJFJvd1s3XTsKICAgICAgICAkU0xBRGF0YXtTb2x1dGlvbk5vdGlmeX0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNMQURhdGF7VmFsaWRJRH0gICAgICAgICAgICAgPSAkUm93WzldOwogICAgICAgICRTTEFEYXRhe0NvbW1lbnR9ICAgICAgICAgICAgID0gJFJvd1sxMF0gfHwgJyc7CiAgICAgICAgJFNMQURhdGF7Q3JlYXRlVGltZX0gICAgICAgICAgPSAkUm93WzExXTsKICAgICAgICAkU0xBRGF0YXtDcmVhdGVCeX0gICAgICAgICAgICA9ICRSb3dbMTJdOwogICAgICAgICRTTEFEYXRhe0NoYW5nZVRpbWV9ICAgICAgICAgID0gJFJvd1sxM107CiAgICAgICAgJFNMQURhdGF7Q2hhbmdlQnl9ICAgICAgICAgICAgPSAkUm93WzE0XTsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgJFNMQURhdGF7VHlwZUlEfSAgICAgICAgICAgICAgICAgID0gJFJvd1sxNV07CiAgICAgICAgJFNMQURhdGF7TWluVGltZUJldHdlZW5JbmNpZGVudHN9ID0gJFJvd1sxNl0gfHwgMDsKIyAtLS0KICAgIH0KCiAgICAjIGNoZWNrIHNsYQogICAgaWYgKCAhJFNMQURhdGF7U0xBSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBTTEFJRCAoJFBhcmFte1NMQUlEfSkhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAjIGdldCBzbGEgdHlwZSBsaXN0CiAgICBteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCiAgICApOwogICAgJFNMQURhdGF7VHlwZX0gPSAkU0xBVHlwZUxpc3QtPnsgJFNMQURhdGF7VHlwZUlEfSB9IHx8ICcnOwojIC0tLQoKICAgICMgZ2V0IGFsbCBzZXJ2aWNlIGlkcwogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBzZXJ2aWNlX2lkIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPyBPUkRFUiBCWSBzZXJ2aWNlX2lkIEFTQycsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBRGF0YXtTTEFJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAU2VydmljZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICRSb3dbMF07CiAgICB9CgogICAgIyBhZGQgdGhlIGlkcwogICAgJFNMQURhdGF7U2VydmljZUlEc30gPSBcQFNlcnZpY2VJRHM7CgogICAgIyBnZXQgc2xhIHByZWZlcmVuY2VzCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U0xBUHJlZmVyZW5jZXNHZXQoIFNMQUlEID0+ICRQYXJhbXtTTEFJRH0gKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlU0xBRGF0YSA9ICggJVNMQURhdGEsICVQcmVmZXJlbmNlcyApOwogICAgfQoKICAgICMgY2FjaGUgcmVzdWx0CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCgogICAgICAgICMgbWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIHNsYSBkYXRhIHRvIGF2b2lkIGl0IGJlaW5nIGFsdGVyZWQgaW4tbWVtb3J5IGxhdGVyCiAgICAgICAgVmFsdWUgICAgICAgICAgPT4geyVTTEFEYXRhfSwKICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICApOwoKICAgIHJldHVybiAlU0xBRGF0YTsKfQoKPWl0ZW0gU0xBTG9va3VwKCkKCnJldHVybnMgdGhlIG5hbWUgb3IgdGhlIHNsYSBpZAoKICAgIG15ICRTTEFOYW1lID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKAogICAgICAgIFNMQUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnU0xBIE5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBTTEFMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NMQUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTTEFJRCBvciBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNMQUxvb2t1cDo6SUQ6OicgLiAkUGFyYW17U0xBSUR9OwogICAgICAgIG15ICRDYWNoZWQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CiAgICAgICAgaWYgKCBkZWZpbmVkICRDYWNoZWQgKSB7CiAgICAgICAgICAgIHJldHVybiAkQ2FjaGVkOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgbmFtZSBGUk9NIHNsYSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U0xBSUR9LCBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICROYW1lID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICROYW1lID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgID0+ICROYW1lLAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTTEFMb29rdXA6Ok5hbWU6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgbXkgJENhY2hlZCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICAgICAgKTsKICAgICAgICBpZiAoIGRlZmluZWQgJENhY2hlZCApIHsKICAgICAgICAgICAgcmV0dXJuICRDYWNoZWQ7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICRTTEFJRCA9ICcnOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkU0xBSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgICAgICAgICAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU0xBSUQ7CiAgICB9Cn0KCj1pdGVtIFNMQUFkZCgpCgphZGQgYSBzbGEKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbIDEsIDUsIDcgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NMQSBOYW1lJywKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICdDYWxlbmRhcjEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMjAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIGZpcnN0IHJlc3BvbnNlIGVzY2FsYXRpb24gaXMgNjAlIHJlYWNoZWQKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDU4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIE1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzID0+IDM0NDMsICAgICAjIChvcHRpb25hbCkKIyAtLS0KICAgICk7Cgo9Y3V0CgpzdWIgU0xBQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyAtLS0KIyBJVFNNCiMgLS0tCiMgICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQgVHlwZUlEKSkgewojIC0tLQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgaWRzCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1NlcnZpY2VJRHN9ICYmIHJlZiAkUGFyYW17U2VydmljZUlEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1NlcnZpY2VJRHMgbmVlZHMgdG8gYmUgYW4gYXJyYXkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtTZXJ2aWNlSURzfSAgICAgICAgICB8fD0gW107CiAgICAkUGFyYW17Q2FsZW5kYXJ9ICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0NvbW1lbnR9ICAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0gICB8fD0gMDsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVUaW1lfSAgICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVOb3RpZnl9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvblRpbWV9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvbk5vdGlmeX0gICAgICB8fD0gMDsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAkUGFyYW17TWluVGltZUJldHdlZW5JbmNpZGVudHN9IHx8PSAwOwojIC0tLQoKICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICBteSAkQ2hlY2tJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZpbmQgZXhpdGluZyBzbGEncyB3aXRoIHRoZSBzYW1lIG5hbWUKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROb0FkZDsKICAgIHdoaWxlICggJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgc2xhLCBpZiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBhZGQgbmV3IFNMQSEgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFkZCBzbGEgdG8gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyAtLS0KIyBJVFNNCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2xhICcKIyAgICAgICAgICAgIC4gJyhuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKIyAgICAgICAgICAgIC4gJ3VwZGF0ZV90aW1lLCB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKIyAgICAgICAgICAgIC4gJyg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKIyAgICAgICAgQmluZCA9PiBbCiMgICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sCiMgICAgICAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9LCBcJFBhcmFte1VwZGF0ZVRpbWV9LCAgICAgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAojICAgICAgICAgICAgXCRQYXJhbXtTb2x1dGlvblRpbWV9LCAgICAgICAgXCRQYXJhbXtTb2x1dGlvbk5vdGlmeX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNsYSAnCiAgICAgICAgICAgIC4gJyhuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUsIHVwZGF0ZV9ub3RpZnksIHNvbHV0aW9uX3RpbWUsIHNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgICAgICAuICd2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnksICcKICAgICAgICAgICAgLiAndHlwZV9pZCwgbWluX3RpbWVfYmV0X2luY2lkZW50cykgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIGdldCBzbGEgaWQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzbGEgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFNMQUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGNoZWNrIHNsYSBpZAogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZmluZCBTTEFJRCBmb3IgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlbW92ZSBhbGwgZXhpc3RpbmcgYWxsb2NhdGlvbnMKICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBSUQgXSwKICAgICk7CgogICAgIyBhZGQgdGhlIG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBAeyAkUGFyYW17U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgIyBhZGQgb25lIGFsbG9jYXRpb24KICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX3NsYSAoc2VydmljZV9pZCwgc2xhX2lkKSBWQUxVRVMgKD8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZUlELCBcJFNMQUlEIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFNMQUlEOwp9Cgo9aXRlbSBTTEFVcGRhdGUoKQoKdXBkYXRlIGEgZXhpc3Rpbmcgc2xhCgogICAgbXkgJFRydWUgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgU0xBSUQgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAxLCAyLCAzIF0sICAjIChvcHRpb25hbCkKICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJ0NhbGVuZGFyMScsICAjIChvcHRpb25hbCkKICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEyMCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA2MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgZmlyc3QgcmVzcG9uc2UgZXNjYWxhdGlvbiBpcyA2MCUgcmVhY2hlZAogICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMTgwLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDgwLCAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vdGlmeSBhZ2VudCBpZiB1cGRhdGUgZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNTgwLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLCAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vdGlmeSBhZ2VudCBpZiBzb2x1dGlvbiBlc2NhbGF0aW9uIGlzIDgwJSByZWFjaGVkCiAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ0NvbW1lbnQnLCAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgTWluVGltZUJldHdlZW5JbmNpZGVudHMgPT4gMzQ0MywgICMgKG9wdGlvbmFsKQojIC0tLQogICAgKTsKCj1jdXQKCnN1YiBTTEFVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIC0tLQojIElUU00KIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTTEFJRCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBpZHMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17U2VydmljZUlEc30gJiYgcmVmICRQYXJhbXtTZXJ2aWNlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnU2VydmljZUlEcyBuZWVkIHRvIGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICAkUGFyYW17U2VydmljZUlEc30gICAgICAgICAgfHw9IFtdOwogICAgJFBhcmFte0NhbGVuZGFyfSAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtDb21tZW50fSAgICAgICAgICAgICB8fD0gJyc7CiAgICAkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9ICAgfHw9IDA7CiAgICAkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0gfHw9IDA7CiAgICAkUGFyYW17VXBkYXRlVGltZX0gICAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17VXBkYXRlTm90aWZ5fSAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17U29sdXRpb25UaW1lfSAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17U29sdXRpb25Ob3RpZnl9ICAgICAgfHw9IDA7CiMgLS0tCiMgSVRTTQojIC0tLQogICAgJFBhcmFte01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSB8fD0gMDsKIyAtLS0KCiAgICAjIGdldCBjaGVjayBpdGVtIG9iamVjdAogICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJENoZWNrSXRlbU9iamVjdC0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXRpbmcgc2xhJ3Mgd2l0aCB0aGUgc2FtZSBuYW1lCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRVcGRhdGUgPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUm93WzBdICE9ICRQYXJhbXtTTEFJRH0gKSB7CiAgICAgICAgICAgICRVcGRhdGUgPSAkUm93WzBdOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFib3J0IHVwZGF0ZSBvZiBzbGEsIGlmIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICgkVXBkYXRlKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgU0xBISAnJFBhcmFte05hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2FjaGU6OlNMQUdldDo6JyAuICRQYXJhbXtTTEFJRH0sCiAgICApOwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICdDYWNoZTo6U0xBTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9LAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2FjaGU6OlNMQUxvb2t1cDo6SUQ6OicgLiAkUGFyYW17U0xBSUR9LAogICAgKTsKCiAgICAjIHVwZGF0ZSBzZXJ2aWNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiMgLS0tCiMgSVRTTQojIC0tLQojICAgICAgICBTUUwgPT4gJ1VQREFURSBzbGEgU0VUIG5hbWUgPSA/LCBjYWxlbmRhcl9uYW1lID0gPywgJwojICAgICAgICAgICAgLiAnZmlyc3RfcmVzcG9uc2VfdGltZSA9ID8sIGZpcnN0X3Jlc3BvbnNlX25vdGlmeSA9ID8sICcKIyAgICAgICAgICAgIC4gJ3VwZGF0ZV90aW1lID0gPywgdXBkYXRlX25vdGlmeSA9ID8sIHNvbHV0aW9uX3RpbWUgPSA/LCBzb2x1dGlvbl9ub3RpZnkgPSA/LCAnCiMgICAgICAgICAgICAuICd2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyAnCiMgICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAojICAgICAgICBCaW5kID0+IFsKIyAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sICAgICAgICAgICAgICAgIFwkUGFyYW17Q2FsZW5kYXJ9LCAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKIyAgICAgICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sICAgICBcJFBhcmFte1VwZGF0ZU5vdGlmeX0sCiMgICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sICAgICAgICBcJFBhcmFte1NvbHV0aW9uTm90aWZ5fSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKIyAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtTTEFJRH0sCiMgICAgICAgIF0sCiAgICAgICAgU1FMID0+ICdVUERBVEUgc2xhIFNFVCBuYW1lID0gPywgY2FsZW5kYXJfbmFtZSA9ID8sICcKICAgICAgICAgICAgLiAnZmlyc3RfcmVzcG9uc2VfdGltZSA9ID8sIGZpcnN0X3Jlc3BvbnNlX25vdGlmeSA9ID8sICcKICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUgPSA/LCB1cGRhdGVfbm90aWZ5ID0gPywgc29sdXRpb25fdGltZSA9ID8sIHNvbHV0aW9uX25vdGlmeSA9ID8sICcKICAgICAgICAgICAgLiAndmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8sICcKICAgICAgICAgICAgLiAndHlwZV9pZCA9ID8sIG1pbl90aW1lX2JldF9pbmNpZGVudHMgPSA/ICcKICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKICAgICAgICAgICAgXCRQYXJhbXtTb2x1dGlvblRpbWV9LCBcJFBhcmFte1NvbHV0aW9uTm90aWZ5fSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1R5cGVJRH0sIFwkUGFyYW17TWluVGltZUJldHdlZW5JbmNpZGVudHN9LCBcJFBhcmFte1NMQUlEfSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIHJlbW92ZSBhbGwgZXhpc3RpbmcgYWxsb2NhdGlvbnMKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzbGFfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTTEFJRH0sIF0KICAgICk7CgogICAgIyBhZGQgdGhlIG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBAeyAkUGFyYW17U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgIyBhZGQgb25lIGFsbG9jYXRpb24KICAgICAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2Vfc2xhIChzZXJ2aWNlX2lkLCBzbGFfaWQpIFZBTFVFUyAoPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlSUQsIFwkUGFyYW17U0xBSUR9IF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU0xBUHJlZmVyZW5jZXNTZXQoKQoKc2V0IFNMQSBwcmVmZXJlbmNlcwoKICAgICRTTEFPYmplY3QtPlNMQVByZWZlcmVuY2VzU2V0KAogICAgICAgIFNMQUlEID0+IDEyMywKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJDb21tZW50JywKICAgICAgICBWYWx1ZSAgICAgPT4gJ3NvbWUgY29tbWVudCcsCiAgICAgICAgVXNlcklEICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU0xBUHJlZmVyZW5jZXNTZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNMQVByZWZlcmVuY2VzU2V0KEBfKTsKfQoKPWl0ZW0gU0xBUHJlZmVyZW5jZXNHZXQoKQoKZ2V0IFNMQSBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTTEFPYmplY3QtPlNMQVByZWZlcmVuY2VzR2V0KAogICAgICAgIFNMQUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTTEFQcmVmZXJlbmNlc0dldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U0xBUHJlZmVyZW5jZXNHZXQoQF8pOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIFRpY2tldENyZWF0ZS50IC0gR2VuZXJpY0ludGVyZmFjZSBUaWNrZXRDcmVhdGUgdGVzdHMgZm9yIFRpY2tldENvbm5lY3RvciBiYWNrZW5kCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzFiMjYxYWQwNmY4ZGU0MTkwNTEwZjI4YjhhMjYwYmQ2MjY2NzA1Y2Mvc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRDcmVhdGUudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgU29ja2V0Owp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRDcmVhdGU7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6U2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0FycmF5UmVmV2l0aERhdGEgSXNIYXNoUmVmV2l0aERhdGEgSXNTdHJpbmdXaXRoRGF0YSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKCiMgaGVscGVyIG9iamVjdAojIHNraXAgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlU3lzdGVtQ29uZmlndXJhdGlvbiA9PiAxLAogICAgICAgIFNraXBTU0xWZXJpZnkgICAgICAgICAgICAgID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CgokU3lzQ29uZmlnT2JqZWN0LT5Db25maWdJdGVtVXBkYXRlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgVmFsdWUgPT4gJzEnLAopOwokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgIFZhbHVlID0+IDEsCik7CiRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJywKICAgIFZhbHVlID0+ICcxJywKKTsKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CiRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6Ok5lZWRBY2NvdW50ZWRUaW1lJywKICAgIFZhbHVlID0+ICcxJywKKTsKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6Ok5lZWRBY2NvdW50ZWRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CgojIGRpc2FibGUgRE5TIGxvb2t1cHMKJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ2hlY2tNWFJlY29yZCcsCiAgICBWYWx1ZSA9PiAnMCcsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja01YUmVjb3JkJywKICAgIFZhbHVlID0+IDAsCik7CiRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gJzEnLAopOwokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBkaXNhYmxlIFNlc3Npb25DaGVja1JlbW90ZUlQIHNldHRpbmcKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1Nlc3Npb25DaGVja1JlbW90ZUlQJywKICAgIFZhbHVlID0+IDAsCik7CgojIGVuYWJsZSBjdXN0b21lciBncm91cHMgc3VwcG9ydAokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ3VzdG9tZXJHcm91cFN1cHBvcnQnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgY2hlY2sgaWYgU1NMIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBkaXNhYmxlZAokU2VsZi0+SXMoCiAgICAkRU5We1BFUkxfTFdQX1NTTF9WRVJJRllfSE9TVE5BTUV9LAogICAgMCwKICAgICdEaXNhYmxlZCBTU0wgY2VydGlmaWNhdGVzIHZlcmlmaWNhdGlvbiBpbiBlbnZpcm9ubWVudCcsCik7CgpteSAkVGVzdE93bmVyTG9naW4gICAgICAgID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RSZXNwb25zaWJsZUxvZ2luICA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CgojIGNyZWF0ZSB1c2VyIG9iamVjdApteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgpteSAkT3duZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0T3duZXJMb2dpbiwKKTsKbXkgJFJlc3BvbnNpYmxlSUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCik7CgpteSAkSW52YWxpZElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTG9va3VwKCBWYWxpZCA9PiAnaW52YWxpZCcgKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPklzTm90KAogICAgJEludmFsaWRJRCwKICAgIHVuZGVmLAogICAgIlZhbGlkTG9va3VwKCkgZm9yICdpbnZhbGlkJyBzaG91bGQgbm90IGJlIHVuZGVmIgopOwoKIyBjcmVhdGUgcXVldWUgb2JqZWN0Cm15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKIyBjcmVhdGUgbmV3IHF1ZXVlCm15ICRRdWV1ZUlEID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCgKICAgIE5hbWUgICAgICAgICAgICA9PiAnVGVzdFF1ZXVlJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFF1ZXVlSUQsCiAgICAiUXVldWVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHF1ZXVlIiwKKTsKCm15ICVRdWV1ZURhdGEgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KCBJRCA9PiAkUXVldWVJRCApOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVRdWV1ZURhdGEgKSwKICAgICJRdWV1ZUdldCgpIC0gZm9yIHRlc3RpbmcgcXVldWUiLAopOwoKIyBnZXQgZ3JvdXAgb2JqZWN0Cm15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKIyBjcmVhdGUgYSBuZXcgZ3JvdXAKbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNwZWNpYWwnIC4gJFJhbmRvbUlELAogICAgQ29tbWVudCA9PiAnY29tbWVudCBkZXNjcmliaW5nIHRoZSBncm91cCcsICAgICMgb3B0aW9uYWwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCm15ICVHcm91cERhdGEgPSAkR3JvdXBPYmplY3QtPkdyb3VwR2V0KCBJRCA9PiAkR3JvdXBJRCApOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVHcm91cERhdGEgKSwKICAgICJHcm91cEdldCgpIC0gZm9yIHRlc3RpbmcgZ3JvdXAiLAopOwoKIyBjcmVhdGUgbmV3IHF1ZXVlIChBZG1pbikKbXkgJFF1ZXVlSUQyID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCgKICAgIE5hbWUgICAgICAgICAgICA9PiAnVGVzdFF1ZXVlMicgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAkR3JvdXBJRCwKICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkUXVldWVJRDIsCiAgICAiUXVldWVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHF1ZXVlMiIsCik7CgpteSAlUXVldWVEYXRhMiA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoIElEID0+ICRRdWV1ZUlEMiApOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVRdWV1ZURhdGEyICksCiAgICAiUXVldWVHZXQoKSAtIGZvciB0ZXN0aW5nIHF1ZXVlMiIsCik7CgojIGdldCB0eXBlIG9iamVjdApteSAkVHlwZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7CgojIGNyZWF0ZSBuZXcgdHlwZQpteSAkVHlwZUlEID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0VHlwZScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUeXBlSUQsCiAgICAiVHlwZUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgdHlwZSIsCik7CgpteSAlVHlwZURhdGEgPSAkVHlwZU9iamVjdC0+VHlwZUdldCgKICAgIElEID0+ICRUeXBlSUQsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVR5cGVEYXRhICksCiAgICAiVHlwZUdldCgpIC0gZm9yIHRlc3RpbmcgdHlwZSIsCik7CgojIGNyZWF0ZSBzZXJ2aWNlIG9iamVjdApteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgojIGNyZWF0ZSBuZXcgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlSUQsCiAgICAiU2VydmljZUFkZCgpIC0gY3JlYXRlIHRlc3Rpbmcgc2VydmljZSIsCik7CgpteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgVXNlcklEICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVNlcnZpY2VEYXRhICksCiAgICAiU2VydmljZUdldCgpIC0gZm9yIHRlc3Rpbmcgc2VydmljZSIsCik7CgojIHNldCBzZXJ2aWNlIGZvciB0aGUgY3VzdG9tZXIKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBjcmVhdGUgU0xBIG9iamVjdApteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKIyBjcmVhdGUgbmV3IFNMQQpteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICBOYW1lICAgICAgID0+ICdUZXN0U0xBJyAuICRSYW5kb21JRCwKICAgIFNlcnZpY2VJRHMgPT4gWyRTZXJ2aWNlSURdLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiMgLS0tCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTTEFJRCwKICAgICJTTEFBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIFNMQSIsCik7CgpteSAlU0xBRGF0YSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU0xBRGF0YSApLAogICAgIlNMQUdldCgpIC0gZm9yIHRlc3RpbmcgU0xBIiwKKTsKCiMgY3JlYXRlIHN0YXRlIG9iamVjdApteSAkU3RhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKCiMgY3JlYXRlIG5ldyBzdGF0ZQpteSAkU3RhdGVJRCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U3RhdGUnIC4gJFJhbmRvbUlELAogICAgVHlwZUlEICA9PiAyLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIC0gY3JlYXRlIHRlc3Rpbmcgc3RhdGUiLAopOwoKbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICBJRCA9PiAkU3RhdGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhdGVEYXRhICksCiAgICAiU3RhdGVHZXQoKSAtIGZvciB0ZXN0aW5nIHN0YXRlIiwKKTsKCiMgY3JlYXRlIHByaW9yaXR5IG9iamVjdApteSAkUHJpb3JpdHlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKTsKCiMgY3JlYXRlIG5ldyBwcmlvcml0eQpteSAkUHJpb3JpdHlJRCA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0UHJpb3JpdHknIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkUHJpb3JpdHlJRCwKICAgICJQcmlvcml0eUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgcHJpb3JpdHkiLAopOwoKbXkgJVByaW9yaXR5RGF0YSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlHZXQoCiAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlELAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVQcmlvcml0eURhdGEgKSwKICAgICJQcmlvcml0eUdldCgpIC0gZm9yIHRlc3RpbmcgcHJpb3JpdHkiLAopOwoKIyBjcmVhdGUgZHluYW1pYyBmaWVsZCBvYmplY3QKbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiMgY3JlYXRlIG5ldyBkeW5hbWljIGZpZWxkCm15ICREeW5hbWljRmllbGRJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgIE5hbWUgICAgICAgPT4gJ1Rlc3REeW5hbWljRmllbGRHSScgLiBpbnQgcmFuZCgxMDAwKSwKICAgIExhYmVsICAgICAgPT4gJ0dJIFRlc3QgRmllbGQnLAogICAgRmllbGRPcmRlciA9PiA5OTkxLAogICAgRmllbGRUeXBlICA9PiAnRGF0ZVRpbWUnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSAgPT4gMCwKICAgICAgICBZZWFyc0luRnV0dXJlID0+IDAsCiAgICAgICAgWWVhcnNJblBhc3QgICA9PiAwLAogICAgICAgIFllYXJzUGVyaW9kICAgPT4gMCwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICREeW5hbWljRmllbGRJRCwKICAgICJEeW5hbWljRmllbGRBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIGR5bmFtaWMgZmllbGQiLAopOwoKbXkgJER5bmFtaWNGaWVsZERhdGEgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBJRCA9PiAkRHluYW1pY0ZpZWxkSUQsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGREYXRhKSwKICAgICJEeW5hbWljRmllbGRHZXQoKSAtIGZvciB0ZXN0aW5nIGR5bmFtaWMgZmllbGQiLAopOwoKIyBjcmVhdGUgd2Vic2VydmljZSBvYmplY3QKbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgcmVmICRXZWJzZXJ2aWNlT2JqZWN0LAogICAgIkNyZWF0ZSB3ZWJzZXJ2aWNlIG9iamVjdCIsCik7CgojIHNldCB3ZWJzZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkUmFuZG9tSUQ7CgpteSAkV2Vic2VydmljZUlEID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VBZGQoCiAgICBOYW1lICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgfSwKICAgICAgICBQcm92aWRlciA9PiB7CiAgICAgICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlSUQsCiAgICAiQWRkZWQgV2Vic2VydmljZSIsCik7CgojIGdldCByZW1vdGUgaG9zdCB3aXRoIHNvbWUgcHJlY2F1dGlvbnMgZm9yIGNlcnRhaW4gdW5pdCB0ZXN0IHN5c3RlbXMKbXkgJEhvc3Q7Cm15ICRGUUROID0gJENvbmZpZ09iamVjdC0+R2V0KCdGUUROJyk7CgojIHRyeSB0byByZXNvbHZlIEZRRE4gaG9zdAppZiAoICRGUUROIG5lICd5b3VyaG9zdC5leGFtcGxlLmNvbScgJiYgZ2V0aG9zdGJ5bmFtZSgkRlFETikgKSB7CiAgICAkSG9zdCA9ICRGUUROOwp9CgojIHRyeSB0byByZXNvbHZlIGxvY2FsaG9zdCBpbnN0ZWFkCmlmICggISRIb3N0ICYmIGdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpICkgewogICAgJEhvc3QgPSAnbG9jYWxob3N0JzsKfQoKIyB1c2UgaGFyZCBjb2RlZCBsb2NhbGhvc3QgSVAgYWRkcmVzcwppZiAoICEkSG9zdCApIHsKICAgICRIb3N0ID0gJzEyNy4wLjAuMSc7Cn0KCiMgcHJlcGFyZSB3ZWJzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yIFRpY2tldCBDb25uZWN0b3IgdXNpbmcgU09BUCB0cmFuc3BvcnQgYmFja2VuZC4nLAogICAgRGVidWdnZXIgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBQcm92aWRlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAwMDAwMCwKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXQ6OlRpY2tldENyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBSZXF1ZXN0ZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5jb2RpbmcgID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEludm9rZXIgPT4gewogICAgICAgICAgICBUaWNrZXRDcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCn07CgojIHVwZGF0ZSB3ZWJzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZVVwZGF0ZSwKICAgICJVcGRhdGVkIFdlYnNlcnZpY2UgJFdlYnNlcnZpY2VJRCAtICRXZWJzZXJ2aWNlTmFtZSIsCik7CgojIEdldCBTZXNzaW9uSUQKIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdApteSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICByZWYgJFJlcXVlc3RlclNlc3Npb25PYmplY3QsCiAgICAiU2Vzc2lvbklEIC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiLAopOwoKIyBjcmVhdGUgYSBuZXcgdXNlciBmb3IgY3VycmVudCB0ZXN0Cm15ICRVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKKTsKbXkgJFBhc3N3b3JkID0gJFVzZXJMb2dpbjsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgd2l0aG91dCBwZXJtaXNzaW9ucyBmb3IgY3VycmVudCB0ZXN0Cm15ICRVc2VyTG9naW4yID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFBhc3N3b3JkMiAgPSAkVXNlckxvZ2luMjsKCiMgY3JlYXRlIGEgY3VzdG9tZXIgd2hlcmUgYSB0aWNrZXQgd2lsbCB1c2UgYW5kIHdpbGwgaGF2ZSBwZXJtaXNzaW9ucwpteSAkQ3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7Cm15ICRDdXN0b21lclBhc3N3b3JkICA9ICRDdXN0b21lclVzZXJMb2dpbjsKCiMgY3JlYXRlIGEgY3VzdG9tZXIgdGhhdCB3aWxsIG5vdCBoYXZlIHBlcm1pc3Npb25zCm15ICRDdXN0b21lclVzZXJMb2dpbjIgPSAkSGVscGVyT2JqZWN0LT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7Cm15ICRDdXN0b21lclBhc3N3b3JkMiAgPSAkQ3VzdG9tZXJVc2VyTG9naW4yOwoKIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwpteSBAVGVzdHMgICAgICAgID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdFbXB0eSBSZXF1ZXN0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4ge30sCiAgICAgICAgRXhwZWN0ZWREYXRhICAgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTm8gQXJ0aWNsZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFRpY2tldCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ICA9PiAxLAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEFydGljbGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIER5bmFtaWNGaWVsZCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXR0YWNobWVudCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFRpdGxlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBDdXN0b21lclVzZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ3VzdG9tZXJVc2VyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgUXVldWUgb3IgUXVldWVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBRdWV1ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUXVldWVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgTG9jaycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgTG9ja0lEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBMb2NrSUQgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBUeXBlIG9yIFR5cGVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFNlcnZpY2UnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU2VydmljZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTTEEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEEgICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTTEFJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFN0YXRlIG9yIFN0YXRlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTdGF0ZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFByaW9yaXR5IG9yIFByaW9yaXR5SUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQcmlvcml0eScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQcmlvcml0eUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIE93bmVyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIE93bmVySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUmVzcG9uc2libGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUmVzcG9uc2liZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQZW5kaW5nVGltZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEzLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgU3ViamVjdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQm9keScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEF1dG9SZXNwb25zZVR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXV0b1Jlc3BvbnNlVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEFydGljbGVUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZSAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBBcnRpY2xlVHlwZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZW5kZXJUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZW5kZXJUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEZyb20nLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIENvbnRlbnRUeXBlIG9yIE1JTUVUeXBlIGFuZCBDaGFyc2V0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29udGVudFR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIENvbnRlbnRUeXBlIG9yIE1JTUVUeXBlIGFuZCBDaGFyc2V0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgSGlzdG9yeVR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBUaW1lVW5pdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgID0+ICclICUgJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBUaW1lVW5pdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgSXRlbSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEIEludGVybmFsJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyAnSW52YWxpZCcgLiAkUmFuZG9tSUQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBJdGVtID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCBpbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyAnSW52YWxpZCcgLiAkUmFuZG9tSUQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBJdGVtID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgaW50ZXJuYWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyAnSW52YWxpZCcgLiAkUmFuZG9tSUQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBEeW5hbWljRmllbGQgbmFtZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgRHluYW1pY0ZpZWxkIHZhbHVlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIER5bmFtaWNGaWVsZCBuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBEeW5hbWljRmllbGQgdmFsdWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnRUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IEZpbGVuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgYXR0YWNobWVudCBDb250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIChVc2luZyBTZXNzaW9uKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCgogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBOYW1lcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFR5cGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFNMQSAgICAgICAgICA9PiAkU0xBRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAkU3RhdGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICRQcmlvcml0eURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RPd25lckxvZ2luLAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3Qgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keSAhIsOCwqckJSYvKCk9P8ODwpwqw4PChMODwpZMOkxALC4tJywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnZW1haWwtZXh0ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggZXh0ZXJuYWwgY3VzdG9tZXIgdXNlcicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgICA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgICAgPT4gMSwKICAgICAgICBFeHRlcm5hbEN1c3RvbWVyID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ3NvbWVvbmVAc29tZWhvdHMuY29tJywKICAgICAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAkUXVldWVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRUeXBlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAkU3RhdGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICRQcmlvcml0eURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RPd25lckxvZ2luLAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3Qgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keSAhIsOCwqckJSYvKCk9P8ODwpwqw4PChMODwpZMOkxALC4tJywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnZW1haWwtZXh0ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIFRpbWVVbml0cyAwJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICRTTEFEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRTdGF0ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJFByaW9yaXR5RGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdE93bmVyTG9naW4sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnZW1haWwtZXh0ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcyBBZ2VudCAoTm8gUGVybWlzc2lvbiknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBBdXRoID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4yLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkMiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAoKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgQ3VzdG9tZXIgKFdpdGggUGVybWlzc2lvbnMpJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbMV0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQXV0aCA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgICAgICAgICAgPT4gJEN1c3RvbWVyUGFzc3dvcmQsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgQ3VzdG9tZXIgKE5vIFBlcm1pc3Npb24pJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQyLAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFsxXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWzFdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyTG9naW4yLAogICAgICAgICAgICBQYXNzd29yZCAgICAgICAgICA9PiAkQ3VzdG9tZXJQYXNzd29yZDIsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAopOwoKIyBkZWJ1Z2dlciBvYmplY3QKbXkgJERlYnVnZ2VyT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlci0+bmV3KAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW50aWF0ZSBjb3JyZWN0bHknLAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgIG15ICRMb2NhbE9iamVjdCA9ICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICByZWYgJExvY2FsT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIGxvY2FsIG9iamVjdCIsCiAgICApOwoKICAgIG15ICVBdXRoID0gKAogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICApOwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntBdXRofSApICkgewogICAgICAgICVBdXRoID0gJXsgJFRlc3QtPntBdXRofSB9OwogICAgfQoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYnNlcnZpY2UKICAgIG15ICRMb2NhbFJlc3VsdCA9ICRMb2NhbE9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUF1dGgsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRMb2NhbFJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBzdHJ1Y3R1cmUgaXMgdmFsaWQiLAogICAgKTsKCiAgICAjIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0CiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKICAgICRTZWxmLT5JcygKICAgICAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCiAgICBteSAkUmVxdWVzdGVyUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUF1dGgsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgJFRlc3QtPntTdWNjZXNzUmVxdWVzdH0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQiLAogICAgKTsKCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIHN1Y2NlZWQKICAgIGlmICggJFRlc3QtPntTdWNjZXNzQ3JlYXRlfSApIHsKCiAgICAgICAgIyBsb2NhbCByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXRJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IFRpY2tldE51bWJlciB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIHJlcXVlc3RlciByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IFRpY2tldElEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBUaWNrZXROdW1iZXIgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LAogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRpY2tldCBvYmplY3QKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIGdldCB0aGUgVGlja2V0IGVudHJ5IChmcm9tIGxvY2FsIHJlc3VsdCkKICAgICAgICBteSAlTG9jYWxUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlTG9jYWxUaWNrZXREYXRhICksCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gY3JlYXRlZCBsb2NhbCB0aWNrZXQgc3RydWN0dXJlIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBUaWNrZXQgZW50cnkgKGZyb20gcmVxdWVzdGVyIHJlc3VsdCkKICAgICAgICBteSAlUmVxdWVzdGVyVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVSZXF1ZXN0ZXJUaWNrZXREYXRhICksCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gY3JlYXRlZCByZXF1ZXN0ZXIgdGlja2V0IHN0cnVjdHVyZSB3aXRoIFRydWUuIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHRpY2tldCBhdHRyaWJ1dGVzIGFzIGRlZmluZWQgaW4gdGhlIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7VGl0bGV9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntUaXRsZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT5UaXRsZSBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKCiAgICAgICAgKTsKCiAgICAgICAgIyBleHRlcm5hbCBjdXN0b21lcnMgb25seSBzZXQgaXQncyB2YWx1ZSBpbiBhcnRpY2xlIChpZiBubyBGcm9tIGlzIGRlZmluZWQpLCB0aWNrZXQKICAgICAgICAjIGlzIGNyZWF0ZWQgd2l0aCBhbiBlbXB0eSBjdXN0b21lcgogICAgICAgIGlmICggJFRlc3QtPntFeHRlcm5hbEN1c3RvbWVyfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT5DdXN0b21lclVzZXIgaXMgZW1wdHkuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT5DdXN0b21lclVzZXIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoUXVldWUgVHlwZSBTZXJ2aWNlIFNMQSBTdGF0ZSBQcmlvcml0eSBPd25lciBSZXNwb25zaWJsZSkpIHsKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPnsgJEF0dHJpYnV0ZSAuICdJRCcgfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxUaWNrZXREYXRheyAkQXR0cmlidXRlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT4kQXR0cmlidXRlIiAuICdJRCcgLiAiIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxUaWNrZXREYXRheyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT4kQXR0cmlidXRlIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbG9jYWwgYXJ0aWNsZSBpbmZvcm1hdGlvbgogICAgICAgIG15ICVMb2NhbEFydGljbGVEYXRhID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHJlcXVlc3RlciBhcnRpY2xlIGluZm9ybWF0aW9uCiAgICAgICAgbXkgJVJlcXVlc3RlckFydGljbGVEYXRhID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoU3ViamVjdCBCb2R5IENvbnRlbnRUeXBlIE1pbWVUeXBlIENoYXJzZXQgRnJvbSkpIHsKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgQXJ0aWNsZS0+JEF0dHJpYnV0ZSBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhBcnRpY2xlVHlwZSBTZW5kZXJUeXBlKSkgewogICAgICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnsgJEF0dHJpYnV0ZSAuICdJRCcgfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxBcnRpY2xlRGF0YXsgJEF0dHJpYnV0ZSAuICdJRCcgfSwKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57ICRBdHRyaWJ1dGUgLiAnSUQnIH0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBBcnRpY2xlLT4kQXR0cmlidXRlIiAuICdJRCcgLiAiIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxBcnRpY2xlRGF0YXskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBBcnRpY2xlLT4kQXR0cmlidXRlIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgIG15IEBSZXF1ZXN0ZWREeW5hbWljRmllbGRzOwogICAgICAgIGlmICggcmVmICRUZXN0LT57UmVxdWVzdERhdGF9LT57RHluYW1pY0ZpZWxkfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgIHB1c2ggQFJlcXVlc3RlZER5bmFtaWNGaWVsZHMsICRUZXN0LT57UmVxdWVzdERhdGF9LT57RHluYW1pY0ZpZWxkfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBSZXF1ZXN0ZWREeW5hbWljRmllbGRzID0gQHsgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9IH07CiAgICAgICAgfQogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkIChAUmVxdWVzdGVkRHluYW1pY0ZpZWxkcykgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkTG9jYWxUaWNrZXREYXRheyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIFRpY2tldC0+RHluYW1pY0ZpZWxkXyIKICAgICAgICAgICAgICAgICAgICAuICREeW5hbWljRmllbGQtPntOYW1lfQogICAgICAgICAgICAgICAgICAgIC4gIiBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgYXR0YWNobWVudHMKICAgICAgICBteSAlQXR0YWNobWVudEluZGV4ID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICAgICAgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBTdHJpcFBsYWluQm9keUFzQXR0YWNobWVudCA9PiAzLAogICAgICAgICAgICBBcnRpY2xlICAgICAgICAgICAgICAgICAgICA9PiBcJUxvY2FsQXJ0aWNsZURhdGEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzOwogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICRGaWxlSUQgKCBzb3J0IGtleXMgJUF0dGFjaG1lbnRJbmRleCApIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRmlsZUlEOwogICAgICAgICAgICBteSAlQXR0YWNobWVudCA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkRmlsZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCBcJUF0dGFjaG1lbnQgKTsKCiAgICAgICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NAogICAgICAgICAgICAkQXR0YWNobWVudHtDb250ZW50fSA9IGVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50e0NvbnRlbnR9LCAnJyApOwoKICAgICAgICAgICAgIyBkZWxldGUgbm90IG5lZWRlZCBhdHRyaWJ1dGVzCiAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDb250ZW50QWx0ZXJuYXRpdmUgQ29udGVudElEIEZpbGVzaXplIEZpbGVzaXplUmF3KSkgewogICAgICAgICAgICAgICAgZGVsZXRlICRBdHRhY2htZW50eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnRzLCB7JUF0dGFjaG1lbnR9OwogICAgICAgIH0KCiAgICAgICAgbXkgQFJlcXVlc3RlZEF0dGFjaG1lbnRzOwogICAgICAgIGlmICggcmVmICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXR0YWNobWVudH0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICBwdXNoIEBSZXF1ZXN0ZWRBdHRhY2htZW50cywgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBdHRhY2htZW50fTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBSZXF1ZXN0ZWRBdHRhY2htZW50cyA9IEB7ICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXR0YWNobWVudH0gfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgXEBBdHRhY2htZW50cywKICAgICAgICAgICAgXEBSZXF1ZXN0ZWRBdHRhY2htZW50cywKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPkF0dGFjaG1lbnQgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1vdmUgYXR0cmlidXRlcyB0aGF0IG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIGxvY2FsIGFuZCByZXF1ZXN0ZXIgcmVzcG9uc2VzCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKAogICAgICAgICAgICBxdyhUaWNrZXRJRCBUaWNrZXROdW1iZXIgQ3JlYXRlZCBDaGFuZ2VkIEFnZSBDcmVhdGVUaW1lVW5peCBVbmxvY2tUaW1lb3V0KQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBkZWxldGUgJExvY2FsVGlja2V0RGF0YXskQXR0cmlidXRlfTsKICAgICAgICAgICAgZGVsZXRlICRSZXF1ZXN0ZXJUaWNrZXREYXRheyRBdHRyaWJ1dGV9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICBcJUxvY2FsVGlja2V0RGF0YSwKICAgICAgICAgICAgXCVSZXF1ZXN0ZXJUaWNrZXREYXRhLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHRpY2tldCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwoKICAgICAgICAjIHJlbW92ZSBhdHRyaWJ1dGVzIHRoYXQgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbG9jYWwgYW5kIHJlcXVlc3RlciByZXNwb25zZXMKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgICAgIHF3KCBBZ2UgQWdlVGltZVVuaXggQXJ0aWNsZUlEIFRpY2tldElEIENyZWF0ZWQgQ2hhbmdlZCBJbmNvbWluZ1RpbWUgVGlja2V0TnVtYmVyCiAgICAgICAgICAgIENyZWF0ZVRpbWVVbml4CiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlICRMb2NhbEFydGljbGVEYXRheyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBkZWxldGUgJFJlcXVlc3RlckFydGljbGVEYXRheyRBdHRyaWJ1dGV9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICBcJUxvY2FsQXJ0aWNsZURhdGEsCiAgICAgICAgICAgIFwlUmVxdWVzdGVyQXJ0aWNsZURhdGEsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgYXJ0aWNsZSByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0aGUgdGlja2V0cwogICAgICAgIGZvciBteSAkVGlja2V0SUQgKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICBteSAkVGlja2V0RGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldERlbGV0ZSwKICAgICAgICAgICAgICAgICJUaWNrZXREZWxldGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgSUQgJFRpY2tldElEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB0ZXN0cyBzdXBwb3NlZCB0byBmYWlsCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e1RpY2tldElEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgVGlja2V0SUQgd2l0aCBmYWxzZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXROdW1iZXIgd2l0aCBmYWxzZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBBcnRpY2xlSUQgd2l0aCBmYWxzZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0sCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWREYXRhfS0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JDb2RlIG1hdGNoZWQgd2l0aCBleHBlY3RlZCBsb2NhbCBjYWxsIHJlc3VsdC4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIHdpdGggdHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgaXMgbm90IGVtcHR5LiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfQogICAgICAgICAgICAgICAgLiAnOiAnCiAgICAgICAgICAgICAgICAuICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIChvdXRzaWRlIERhdGEgaGFzaCkgbWF0Y2hlZCB3aXRoIGNvbmNhdGVuYXRpb24iCiAgICAgICAgICAgICAgICAuICIgb2YgRXJyb3JDb2RlIGFuZCBFcnJvck1lc3NhZ2Ugd2l0aGluIERhdGEgaGFzaC4iLAogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbAogICAgICAgICMgcmVzdWx0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBTT0FQIGNhbGwgcmVzdWx0CiAgICAgICAgaWYgKCAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgICAgICBkZWxldGUgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfTsKICAgICAgICB9CgogICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgKG91dHNpZGUgRGF0YSBoYXNoKSBnb3QgcmVtb3ZlZCB0byBjb21wYXJlIgogICAgICAgICAgICAgICAgLiAiIGxvY2FsIGFuZCByZW1vdGUgdGVzdHMuIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIiwKICAgICAgICApOwogICAgfQp9CgojIGNsZWFuIHVwIHdlYnNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiLAopOwoKIyBpbnZhbGlkYXRlIHF1ZXVlcwp7CiAgICBteSAkU3VjY2VzcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVVcGRhdGUoCiAgICAgICAgJVF1ZXVlRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRJbnZhbGlkSUQsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlF1ZXVlVXBkYXRlKCkgc2V0IHF1ZXVlICRRdWV1ZURhdGF7TmFtZX0gdG8gaW52YWxpZCIsCiAgICApOwoKICAgICRTdWNjZXNzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVVwZGF0ZSgKICAgICAgICAlUXVldWVEYXRhMiwKICAgICAgICBWYWxpZElEID0+ICRJbnZhbGlkSUQsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlF1ZXVlVXBkYXRlKCkgc2V0IHF1ZXVlICRRdWV1ZURhdGEye05hbWV9IHRvIGludmFsaWQiLAogICAgKTsKCn0KCiMgaW52YWxpZGF0ZSBncm91cAp7CiAgICBteSAkU3VjY2VzcyA9ICRHcm91cE9iamVjdC0+R3JvdXBVcGRhdGUoCiAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRJbnZhbGlkSUQsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIkdyb3VwVXBkYXRlKCkgc2V0IHR5cGUgJEdyb3VwRGF0YXtOYW1lfSB0byBpbnZhbGlkIiwKICAgICk7Cn0KCiMgaW52YWxpZGF0ZSB0eXBlCnsKICAgIG15ICRTdWNjZXNzID0gJFR5cGVPYmplY3QtPlR5cGVVcGRhdGUoCiAgICAgICAgJVR5cGVEYXRhLAogICAgICAgIFZhbGlkSUQgPT4gJEludmFsaWRJRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiVHlwZVVwZGF0ZSgpIHNldCB0eXBlICRUeXBlRGF0YXtOYW1lfSB0byBpbnZhbGlkIiwKICAgICk7Cn0KCiMgaW52YWxpZGF0ZSBzZXJ2aWNlCnsKICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgJVNlcnZpY2VEYXRhLAogICAgICAgIFZhbGlkSUQgPT4gJEludmFsaWRJRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiU2VydmljZVVwZGF0ZSgpIHNldCBzZXJ2aWNlICRTZXJ2aWNlRGF0YXtOYW1lfSB0byBpbnZhbGlkIiwKICAgICk7Cn0KCiMgaW52YWxpZGF0ZSBTTEEKewogICAgbXkgJFN1Y2Nlc3MgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgJVNMQURhdGEsCiAgICAgICAgVmFsaWRJRCA9PiAkSW52YWxpZElELAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2sKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJTTEFVcGRhdGUoKSBzZXQgU0xBICRTTEFEYXRhe05hbWV9IHRvIGludmFsaWQiLAogICAgKTsKfQoKIyBpbnZhbGlkYXRlIHN0YXRlCnsKICAgIG15ICRTdWNjZXNzID0gJFN0YXRlT2JqZWN0LT5TdGF0ZVVwZGF0ZSgKICAgICAgICAlU3RhdGVEYXRhLAogICAgICAgIFZhbGlkSUQgPT4gJEludmFsaWRJRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiU3RhdGVVcGRhdGUoKSBzZXQgc3RhdGUgJFN0YXRlRGF0YXtOYW1lfSB0byBpbnZhbGlkIiwKICAgICk7Cn0KCiMgaW52YWxpZGF0ZSB0eXBlCnsKICAgIG15ICRTdWNjZXNzID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eVVwZGF0ZSgKICAgICAgICAlUHJpb3JpdHlEYXRhLAogICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgVmFsaWRJRCAgICA9PiAkSW52YWxpZElELAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2sKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJQcmlvcml0eVVwZGF0ZSgpIHNldCBwcmlvcml0eSAkUHJpb3JpdHlEYXRhe05hbWV9IHRvIGludmFsaWQiLAogICAgKTsKfQoKIyByZW1vdmUgRHluYW1pY0ZpZWxkcwp7CiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIkR5bmFtaWNGaWVsZERlbGV0ZSgpIGZvciBEeW5hbWljRmllbGQgJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSIKICAgICk7Cn0KCjE7Cg==
IyAtLQojIFRpY2tldFNlYXJjaC50IC0gR2VuZXJpY0ludGVyZmFjZSB0cmFuc3BvcnQgaW50ZXJmYWNlIHRlc3RzIGZvciBUaWNrZXRDb25uZWN0b3IgYmFja2VuZAojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8xYjI2MWFkMDZmOGRlNDE5MDUxMGYyOGI4YTI2MGJkNjI2NjcwNWNjL3NjcmlwdHMvdGVzdC9HZW5lcmljSW50ZXJmYWNlL09wZXJhdGlvbi9UaWNrZXQvVGlja2V0U2VhcmNoLnQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIE1JTUU6OkJhc2U2NDsKCnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyOwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6VGlja2V0U2VhcmNoOwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlNlc3Npb246OlNlc3Npb25DcmVhdGU7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJE1haW5PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgojIHNraXAgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlU3lzdGVtQ29uZmlndXJhdGlvbiA9PiAxLAogICAgICAgIFNraXBTU0xWZXJpZnkgICAgICAgICAgICAgID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZ2V0IGEgcmFuZG9tIGlkCm15ICRSYW5kb21JRCA9IGludCByYW5kIDFfMDAwXzAwMF8wMDA7CgokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyBnZXQgdGltZSBvYmplY3QKbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKIyBnZXQgdGhlIHN0YXJ0IHRpbWUgZm9yIHRoZSB0ZXN0Cm15ICRTdGFydFRpbWUgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpOwoKIyBnZXQgdXNlciBvYmplY3QKbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKIyBjcmVhdGUgYSBuZXcgdXNlciBmb3IgY3VycmVudCB0ZXN0Cm15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckFkZCgKICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1Rlc3QnLAogICAgVXNlckxhc3RuYW1lICA9PiAnVXNlcicsCiAgICBVc2VyTG9naW4gICAgID0+ICdUZXN0VXNlcicgLiAkUmFuZG9tSUQsCiAgICBVc2VyUHcgICAgICAgID0+ICdzb21lLXBhc3MnLAogICAgVXNlckVtYWlsICAgICA9PiAndGVzdCcgLiAkUmFuZG9tSUQgLiAnZW1haWxAZXhhbXBsZS5jb20nLAogICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgQ2hhbmdlVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVXNlcklELAogICAgJ1VzZXIgQWRkICgpJywKKTsKCiMgY3JlYXRlIHR5cGUgb2JqZWN0Cm15ICRUeXBlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCiMgY3JlYXRlIG5ldyB0eXBlCm15ICRUeXBlSUQgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RUeXBlJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFR5cGVJRCwKICAgICJUeXBlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyB0eXBlIiwKKTsKCm15ICVUeXBlRGF0YSA9ICRUeXBlT2JqZWN0LT5UeXBlR2V0KAogICAgSUQgPT4gJFR5cGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVHlwZURhdGEgKSwKICAgICJRdWV1ZUdldCgpIC0gZm9yIHRlc3RpbmcgdHlwZSIsCik7CgojIGdldCBzZXJ2aWNlIG9iamVjdApteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgojIGNyZWF0ZSBuZXcgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlSUQsCiAgICAiU2VydmljZUFkZCgpIC0gY3JlYXRlIHRlc3Rpbmcgc2VydmljZSIsCik7CgpteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgVXNlcklEICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVNlcnZpY2VEYXRhICksCiAgICAiU2VydmljZUdldCgpIC0gZm9yIHRlc3Rpbmcgc2VydmljZSIsCik7CgojIHN0YXJ0IER5bmFtaWNGaWVsZHMKbXkgQFRlc3REeW5hbWljRmllbGRzOwoKbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiMgY3JlYXRlIGEgZHluYW1pYyBmaWVsZApteSAkRmllbGRJRDEgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICBOYW1lICAgICAgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIEZpZWxkT3JkZXIgPT4gOTk5MSwKICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnRGVmYXVsdCcsCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwoKcHVzaCBAVGVzdER5bmFtaWNGaWVsZHMsICRGaWVsZElEMTsKCm15ICRGaWVsZDFDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBJRCA9PiAkRmllbGRJRDEsCik7CgojIGNyZWF0ZSBhIGR5bmFtaWMgZmllbGQKbXkgJEZpZWxkSUQyID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgTmFtZSAgICAgICA9PiAiREZUMiRSYW5kb21JRCIsCiAgICBMYWJlbCAgICAgID0+ICdEZXNjcmlwdGlvbicsCiAgICBGaWVsZE9yZGVyID0+IDk5OTIsCiAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlICAgPT4gJ0RlZmF1bHQnLAogICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgdGlja2V0MV9maWVsZDIgPT4gJ3RpY2tldDFfZmllbGQyJywKICAgICAgICAgICAgdGlja2V0Ml9maWVsZDIgPT4gJ3RpY2tldDJfZmllbGQyJywKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKCm15ICRGaWVsZDJDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBJRCA9PiAkRmllbGRJRDIsCik7CgpwdXNoIEBUZXN0RHluYW1pY0ZpZWxkcywgJEZpZWxkSUQyOwoKIyBjcmVhdGUgYSBkeW5hbWljIGZpZWxkCm15ICRGaWVsZElEMyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgIE5hbWUgICAgICAgPT4gIkRGVDMkUmFuZG9tSUQiLAogICAgTGFiZWwgICAgICA9PiAnRGVzY3JpcHRpb24nLAogICAgRmllbGRPcmRlciA9PiA5OTkzLAogICAgRmllbGRUeXBlICA9PiAnRGF0ZVRpbWUnLCAgICAgICAgIyBtYW5kYXRvcnksIHNlbGVjdHMgdGhlIERGIGJhY2tlbmQgdG8gdXNlIGZvciB0aGlzIGZpZWxkCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCiAgICBSZW9yZGVyID0+IDAsCik7CgpteSAkRmllbGQzQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgSUQgPT4gJEZpZWxkSUQzLAopOwoKcHVzaCBAVGVzdER5bmFtaWNGaWVsZHMsICRGaWVsZElEMzsKCiMgY3JlYXRlIGEgZHluYW1pYyBmaWVsZApteSAkRmllbGRJRDQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICBOYW1lICAgICAgID0+ICJERlQ0JFJhbmRvbUlEIiwKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIEZpZWxkT3JkZXIgPT4gOTk5MywKICAgIEZpZWxkVHlwZSAgPT4gJ0NoZWNrYm94JywgICAgICAgICMgbWFuZGF0b3J5LCBzZWxlY3RzIHRoZSBERiBiYWNrZW5kIHRvIHVzZSBmb3IgdGhpcyBmaWVsZAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnRGVmYXVsdCcsCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwoKbXkgJEZpZWxkNENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgIElEID0+ICRGaWVsZElENCwKKTsKCnB1c2ggQFRlc3REeW5hbWljRmllbGRzLCAkRmllbGRJRDQ7CgojIGNyZWF0ZSBhIGR5bmFtaWMgZmllbGQKbXkgJEZpZWxkSUQ1ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgTmFtZSAgICAgICA9PiAiREZUNSRSYW5kb21JRCIsCiAgICBMYWJlbCAgICAgID0+ICdEZXNjcmlwdGlvbicsCiAgICBGaWVsZE9yZGVyID0+IDk5OTUsCiAgICBGaWVsZFR5cGUgID0+ICdNdWx0aXNlbGVjdCcsICAgICAjIG1hbmRhdG9yeSwgc2VsZWN0cyB0aGUgREYgYmFja2VuZCB0byB1c2UgZm9yIHRoaXMgZmllbGQKICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICBDb25maWcgICAgID0+IHsKICAgICAgICBEZWZhdWx0VmFsdWUgICA9PiBbICd0aWNrZXQyX2ZpZWxkNScsICd0aWNrZXQ0X2ZpZWxkNScgXSwKICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiB7CiAgICAgICAgICAgIHRpY2tldDFfZmllbGQ1ID0+ICd0aWNrZXQxX2ZpZWxkNTEnLAogICAgICAgICAgICB0aWNrZXQyX2ZpZWxkNSA9PiAndGlja2V0Ml9maWVsZDUyJywKICAgICAgICAgICAgdGlja2V0M19maWVsZDUgPT4gJ3RpY2tldDJfZmllbGQ1MycsCiAgICAgICAgICAgIHRpY2tldDRfZmllbGQ1ID0+ICd0aWNrZXQyX2ZpZWxkNTQnLAogICAgICAgICAgICB0aWNrZXQ1X2ZpZWxkNSA9PiAndGlja2V0Ml9maWVsZDU1JywKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKCm15ICRGaWVsZDVDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBJRCA9PiAkRmllbGRJRDUsCik7CgpwdXNoIEBUZXN0RHluYW1pY0ZpZWxkcywgJEZpZWxkSUQ1OwoKIyBmaW5pc2ggRHluYW1pY0ZpZWxkcwoKIyBjcmVhdGUgdGlja2V0IG9iamVjdApteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKIyBjcmVhdGUgMyB0aWNrZXRzCgojdGlja2V0IGlkIGNvbnRhaW5lcgpteSBAVGlja2V0SURzOwoKIyBjcmVhdGUgdGlja2V0IDEKbXkgJFRpY2tldElEMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IE9uZSBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyT25lQGV4YW1wbGUuY29tJywKICAgIFNlcnZpY2UgICAgICA9PiAnVGVzdFNlcnZpY2UnIC4gJFJhbmRvbUlELAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEMSwKICAgICJUaWNrZXRDcmVhdGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgT25lIElEICRUaWNrZXRJRDEiLAopOwoKbXkgJFRpY2tldE51bWJlcjEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0TnVtYmVyMSwKICAgICJUaWNrZXROdW1iZXJMb29rdXAoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgT25lIElEICRUaWNrZXRJRDEiLAopOwoKIyB1cGRhdGUgZXNjYWxhdGlvbiB0aW1lcyBkaXJlY3RseSBpbiB0aGUgREIKbXkgJEVzY2FsYXRpb25UaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSArIDEyMDsKcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICBTUUwgPT4gJwogICAgICAgIFVQREFURSB0aWNrZXQKICAgICAgICBTRVQgZXNjYWxhdGlvbl90aW1lID0gPywgZXNjYWxhdGlvbl9yZXNwb25zZV90aW1lID0gPywgZXNjYWxhdGlvbl91cGRhdGVfdGltZSA9ID8sCiAgICAgICAgICAgIGVzY2FsYXRpb25fc29sdXRpb25fdGltZSA9ID8sIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8KICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgQmluZCA9PiBbCiAgICAgICAgXCRFc2NhbGF0aW9uVGltZSwKICAgICAgICBcJEVzY2FsYXRpb25UaW1lLAogICAgICAgIFwkRXNjYWxhdGlvblRpbWUsCiAgICAgICAgXCRFc2NhbGF0aW9uVGltZSwKICAgICAgICBcJzEnLAogICAgICAgIFwkVGlja2V0SUQxLAogICAgXSwKKTsKCiMgY3JlYXRlIGJhY2tlbmQgb2JqZWN0IGFuZCBkZWxlZ2F0ZXMKbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiRTZWxmLT5JcygKICAgIHJlZiAkQmFja2VuZE9iamVjdCwKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdCYWNrZW5kIG9iamVjdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHknLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRGaWVsZDFDb25maWcsCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAndGlja2V0MV9maWVsZDEnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEZpZWxkMkNvbmZpZywKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICd0aWNrZXQxX2ZpZWxkMicsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRmllbGQzQ29uZmlnLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzIwMDEtMDEtMDEgMDE6MDE6MDEnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEZpZWxkNENvbmZpZywKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICcwJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRGaWVsZDVDb25maWcsCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiBbICd0aWNrZXQxX2ZpZWxkNTEnLCAndGlja2V0MV9maWVsZDUyJywgJ3RpY2tldDFfZmllbGQ1MycgXSwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKIyBnZXQgdGhlIFRpY2tldCBlbnRyeQojIHdpdGhvdXQgZHluYW1pYyBmaWVsZHMKbXkgJVRpY2tldEVudHJ5T25lID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQxLAogICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXRFbnRyeU9uZSApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgZm9yIExvY2FsIFRpY2tldEdldCBPbmUgSUQgJFRpY2tldElEMSIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlPbmUgKSB7CiAgICBpZiAoICEkVGlja2V0RW50cnlPbmV7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5T25leyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeU9uZXskS2V5fTsKICAgIH0KfQoKIyBnZXQgdGhlIFRpY2tldCBlbnRyeQojIHdpdGggZHluYW1pYyBmaWVsZHMKbXkgJVRpY2tldEVudHJ5T25lREYgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5T25lREYgKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIHdpdGggREYgZm9yIExvY2FsIFRpY2tldEdldCBPbmUgSUQgJFRpY2tldElEMSIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlPbmVERiApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeU9uZURGeyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeU9uZURGeyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeU9uZURGeyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQxOwoKIyBjcmVhdGUgdGlja2V0IDIKbXkgJFRpY2tldElEMiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyVHdvJyAuICRSYW5kb21JRCAuICdAZXhhbXBsZS5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEMiwKICAgICJUaWNrZXRDcmVhdGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgVHdvIElEICRUaWNrZXRJRDIiLAopOwoKbXkgJFRpY2tldE51bWJlcjIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0TnVtYmVyMiwKICAgICJUaWNrZXROdW1iZXJMb29rdXAoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgT25lIElEICRUaWNrZXRJRDIiLAopOwoKIyBzZXQgZHluYW1pYyBmaWVsZCB2YWx1ZXMKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRGaWVsZDFDb25maWcsCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAndGlja2V0Ml9maWVsZDEnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEZpZWxkMkNvbmZpZywKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICd0aWNrZXQyX2ZpZWxkMicsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRmllbGQzQ29uZmlnLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzIwMTEtMTEtMTEgMTE6MTE6MTEnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEZpZWxkNENvbmZpZywKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICcxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRGaWVsZDVDb25maWcsCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiBbCiAgICAgICAgJ3RpY2tldDFfZmllbGQ1JywKICAgICAgICAndGlja2V0Ml9maWVsZDUnLAogICAgICAgICd0aWNrZXQ0X2ZpZWxkNScsCiAgICBdLAogICAgVXNlcklEID0+IDEsCik7CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aG91dCBERgpteSAlVGlja2V0RW50cnlUd28gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5VHdvICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IFR3byBJRCAkVGlja2V0SUQyIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeVR3byApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVR3b3skS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlUd297JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5VHdveyRLZXl9OwogICAgfQp9CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aCBERgpteSAlVGlja2V0RW50cnlUd29ERiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMiwKICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlUd29ERiApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgZm9yIExvY2FsIFRpY2tldEdldCBUd28gSUQgJFRpY2tldElEMiIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlUd29ERiApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQyOwoKIyBjcmVhdGUgdGlja2V0IDMKbXkgJFRpY2tldElEMyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRocmVlIFRpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMSB2ZXJ5IGxvdycsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyVGhyZWVAZXhhbXBsZS5jb20nLAogICAgVHlwZSAgICAgICAgID0+ICdUZXN0VHlwZScgLiAkUmFuZG9tSUQsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQzLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBUaHJlZSBJRCAkVGlja2V0SUQzIiwKKTsKCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKbXkgJVRpY2tldEVudHJ5VGhyZWUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDMsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5VGhyZWUgKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIGZvciBMb2NhbCBUaWNrZXRHZXQgVGhyZWUgSUQgJFRpY2tldElEMyIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlUaHJlZSApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVRocmVleyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVRocmVleyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeVRocmVleyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQzOwoKIyBjcmVhdGUgdGlja2V0IDQKbXkgJFRpY2tldElENCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IEZvdXIgVGl0bGUgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgIFF1ZXVlICAgICAgICA9PiAnSnVuaycsCiAgICBMb2NrICAgICAgICAgPT4gJ2xvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzY1NDMyMScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyRm91ckBleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQ0LAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBGb3VyIElEICRUaWNrZXRJRDQiLAopOwoKIyBmaXJzdCBhcnRpY2xlCm15ICRBcnRpY2xlSUQ0MSA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQ0LAogICAgQXJ0aWNsZVR5cGUgICAgPT4gJ3Bob25lJywKICAgIFNlbmRlclR5cGUgICAgID0+ICdhZ2VudCcsCiAgICBGcm9tICAgICAgICAgICA9PiAnQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgVG8gICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgIENjICAgICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBSZXBseVRvICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgU3ViamVjdCAgICAgICAgPT4gJ2ZpcnN0IGFydGljbGUnLAogICAgQm9keSAgICAgICAgICAgPT4gJ0EgdGV4dCBmb3IgdGhlIGJvZHksIFRpdGxlIMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICBDb250ZW50VHlwZSAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgSGlzdG9yeUNvbW1lbnQgPT4gJ2ZpcnN0IGFydGljbGUnLAogICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgIE5vQWdlbnROb3RpZnkgID0+IDEsCik7CgojIHNlY29uZCBhcnRpY2xlCm15ICRBcnRpY2xlSUQ0MiA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICA9PiAkVGlja2V0SUQ0LAogICAgQXJ0aWNsZVR5cGUgPT4gJ3Bob25lJywKICAgIFNlbmRlclR5cGUgID0+ICdhZ2VudCcsCiAgICBGcm9tICAgICAgICA9PiAnQW5vdCBSZWFsIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgVG8gICAgICAgICAgPT4gJ0N1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgIENjICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBSZXBseVRvICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgU3ViamVjdCAgICAgPT4gJ3NlY29uZCBhcnRpY2xlJywKICAgIEJvZHkgICAgICAgID0+ICdBIHRleHQgZm9yIHRoZSBib2R5LCBub3QgdG9vIGxvbmcnLAogICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAoKICAgICMgICAgQXR0YWNobWVudCAgICAgPT4gXEBBdHRhY2htZW50cywKICAgIEhpc3RvcnlUeXBlICAgID0+ICdPd25lclVwZGF0ZScsCiAgICBIaXN0b3J5Q29tbWVudCA9PiAnc2Vjb25kIGFydGljbGUnLAogICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgIE5vQWdlbnROb3RpZnkgID0+IDEsCik7CgojIHNhdmUgYXJ0aWNsZXMgd2l0aG91dCBhdHRhY2htZW50cwpteSBAQXJ0aWNsZVdpdGhvdXRBdHRhY2htZW50cyA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAogICAgVXNlcklEICAgPT4gMSwKKTsKCmZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVXaXRob3V0QXR0YWNobWVudHMpIHsKCiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRBcnRpY2xlfSApIHsKICAgICAgICBpZiAoICEkQXJ0aWNsZS0+eyRLZXl9ICkgewogICAgICAgICAgICAkQXJ0aWNsZS0+eyRLZXl9ID0gJyc7CiAgICAgICAgfQogICAgICAgIGlmICggJEtleSBlcSAnQWdlJyB8fCAkS2V5IGVxICdBZ2VUaW1lVW5peCcgKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkQXJ0aWNsZS0+eyRLZXl9OwogICAgICAgIH0KICAgIH0KfQoKIyBmaWxlIGNoZWNrcwpmb3IgbXkgJEZpbGUgKHF3KHhscyB0eHQgZG9jIHBuZyBwZGYpKSB7CiAgICBteSAkTG9jYXRpb24gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKQogICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL1N0ZEF0dGFjaG1lbnQvU3RkQXR0YWNobWVudC1UZXN0MS4kRmlsZSI7CgogICAgbXkgJENvbnRlbnRSZWYgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgTG9jYXRpb24gPT4gJExvY2F0aW9uLAogICAgICAgIE1vZGUgICAgID0+ICdiaW5tb2RlJywKICAgICAgICBUeXBlICAgICA9PiAnTG9jYWwnLAogICAgKTsKCiAgICBteSAkQXJ0aWNsZVdyaXRlQXR0YWNobWVudCA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVXcml0ZUF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudCAgICAgPT4gJHskQ29udGVudFJlZn0sCiAgICAgICAgRmlsZW5hbWUgICAgPT4gIlN0ZEF0dGFjaG1lbnQtVGVzdDEuJEZpbGUiLAogICAgICAgIENvbnRlbnRUeXBlID0+ICRGaWxlLAogICAgICAgIEFydGljbGVJRCAgID0+ICRBcnRpY2xlSUQ0MiwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKfQoKIyBnZXQgYXJ0aWNsZXMgYW5kIGF0dGFjaG1lbnRzCm15IEBBcnRpY2xlQm94ID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzdGFydCBhcnRpY2xlIGxvb3AKQVJUSUNMRToKZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZUJveCkgewoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JEFydGljbGV9ICkgewogICAgICAgIGlmICggISRBcnRpY2xlLT57JEtleX0gKSB7CiAgICAgICAgICAgICRBcnRpY2xlLT57JEtleX0gPSAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkS2V5IGVxICdBZ2UnIHx8ICRLZXkgZXEgJ0FnZVRpbWVVbml4JyApIHsKICAgICAgICAgICAgZGVsZXRlICRBcnRpY2xlLT57JEtleX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGF0dGFjaG1lbnQgaW5kZXggKHdpdGhvdXQgYXR0YWNobWVudHMpCiAgICBteSAlQXRtSW5kZXggPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgIENvbnRlbnRQYXRoICAgICAgICAgICAgICAgID0+ICRBcnRpY2xlLT57Q29udGVudFBhdGh9LAogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgICAgICAgID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICBTdHJpcFBsYWluQm9keUFzQXR0YWNobWVudCA9PiAzLAogICAgICAgIEFydGljbGUgICAgICAgICAgICAgICAgICAgID0+ICRBcnRpY2xlLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIG5leHQgQVJUSUNMRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlQXRtSW5kZXggKTsKCiAgICBteSBAQXR0YWNobWVudHM7CiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRGaWxlSUQgKCBzb3J0IGtleXMgJUF0bUluZGV4ICkgewogICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJEZpbGVJRDsKICAgICAgICBteSAlQXR0YWNobWVudCA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBGaWxlSUQgICAgPT4gJEZpbGVJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdHRhY2htZW50ICk7CgogICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NAogICAgICAgICRBdHRhY2htZW50e0NvbnRlbnR9ICAgICAgICAgICAgPSBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSApOwogICAgICAgICRBdHRhY2htZW50e0NvbnRlbnRJRH0gICAgICAgICAgPSAnJzsKICAgICAgICAkQXR0YWNobWVudHtDb250ZW50QWx0ZXJuYXRpdmV9ID0gJyc7CiAgICAgICAgcHVzaCBAQXR0YWNobWVudHMsIHslQXR0YWNobWVudH07CiAgICB9CgogICAgIyBzZXQgQXR0YWNobWVudHMgZGF0YQogICAgJEFydGljbGUtPntBdG1zfSA9IFxAQXR0YWNobWVudHM7Cgp9ICAgICMgZmluaXNoIGFydGljbGUgbG9vcAoKIyBnZXQgdGhlIFRpY2tldCBlbnRyeQpteSAlVGlja2V0RW50cnlGb3VyID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQ0LAogICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXRFbnRyeUZvdXIgKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIGZvciBMb2NhbCBUaWNrZXRHZXQgRm91ciBJRCAkVGlja2V0SUQ0IiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeUZvdXIgKSB7CiAgICBpZiAoICEkVGlja2V0RW50cnlGb3VyeyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeUZvdXJ7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5Rm91cnskS2V5fTsKICAgIH0KfQoKIyBhZGQgdGlja2V0IGlkCnB1c2ggQFRpY2tldElEcywgJFRpY2tldElENDsKCiMgc2V0IHdlYnNlcnZpY2UgbmFtZQpteSAkV2Vic2VydmljZU5hbWUgPSAnLVRlc3QtJyAuICRSYW5kb21JRDsKCiMgY3JlYXRlIHdlYnNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICJDcmVhdGUgd2Vic2VydmljZSBvYmplY3QiLAopOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIFdlYnNlcnZpY2UiLAopOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0OwpteSAkRlFETiA9ICRDb25maWdPYmplY3QtPkdldCgnRlFETicpOwoKIyB0cnkgdG8gcmVzb2x2ZSBGQVFOIGhvc3QKaWYgKCAkRlFETiBuZSAneW91cmhvc3QuZXhhbXBsZS5jb20nICYmIGdldGhvc3RieW5hbWUoJEZRRE4pICkgewogICAgJEhvc3QgPSAkRlFETjsKfQoKIyB0cnkgdG8gcmVzb2x2ZSBsb2NhbGhvc3QgaW5zdGVhZAppZiAoICEkSG9zdCAmJiBnZXRob3N0YnluYW1lKCdsb2NhbGhvc3QnKSApIHsKICAgICRIb3N0ID0gJ2xvY2FsaG9zdCc7Cn0KCiMgdXNlIGhhcmQgY29kZWQgbG9jYWxob3N0IElQIGFkZHJlc3MKaWYgKCAhJEhvc3QgKSB7CiAgICAkSG9zdCA9ICcxMjcuMC4wLjEnOwp9CgojIHByZXBhcmUgd2Vic2VydmljZSBjb25maWcKbXkgJFJlbW90ZVN5c3RlbSA9CiAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0h0dHBUeXBlJykKICAgIC4gJzovLycKICAgIC4gJEhvc3QKICAgIC4gJy8nCiAgICAuICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKQogICAgLiAnL25waC1nZW5lcmljaW50ZXJmYWNlLnBsL1dlYnNlcnZpY2VJRC8nCiAgICAuICRXZWJzZXJ2aWNlSUQ7CgpteSAkV2Vic2VydmljZUNvbmZpZyA9IHsKCiAgICAjICAgIE5hbWUgPT4gJycsCiAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICdUZXN0IGZvciBUaWNrZXQgQ29ubmVjdG9yIHVzaW5nIFNPQVAgdHJhbnNwb3J0IGJhY2tlbmQuJywKICAgIERlYnVnZ2VyID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgUHJvdmlkZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwMDAwMDAsCiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gewogICAgICAgICAgICBUaWNrZXRTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0OjpUaWNrZXRTZWFyY2gnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Nlc3Npb246OlNlc3Npb25DcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgUmVxdWVzdGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuY29kaW5nICA9PiAnVVRGLTgnLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBJbnZva2VyID0+IHsKICAgICAgICAgICAgVGlja2V0U2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAp9OwoKIyB1cGRhdGUgd2Vic2VydmljZSB3aXRoIHJlYWwgY29uZmlnCm15ICRXZWJzZXJ2aWNlVXBkYXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICBJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBOYW1lICAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyAgPT4gJFdlYnNlcnZpY2VDb25maWcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VVcGRhdGUsCiAgICAiVXBkYXRlZCBXZWJzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiLAopOwoKIyBHZXQgU2Vzc2lvbklECiMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKbXkgJFJlcXVlc3RlclNlc3Npb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgcmVmICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LAogICAgIlNlc3Npb25JRCAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCik7Cm15ICRQYXNzd29yZCA9ICRVc2VyTG9naW47CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCm15ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0ID0gJFJlcXVlc3RlclNlc3Npb25PYmplY3QtPlJ1bigKICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgSW52b2tlciAgICAgID0+ICdTZXNzaW9uQ3JlYXRlJywKICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgIH0sCik7CgpteSAkTmV3U2Vzc2lvbklEID0gJFJlcXVlc3RlclNlc3Npb25SZXN1bHQtPntEYXRhfS0+e1Nlc3Npb25JRH07CgpteSAkVGVzdENvdW50ZXIgPSAxOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXROdW1iZXIxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiBbCiAgICAgICAgICAgICAgICAkVGlja2V0TnVtYmVyMSwKICAgICAgICAgICAgICAgICRUaWNrZXROdW1iZXIyLAogICAgICAgICAgICBdLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgPT4gWwogICAgICAgICAgICAgICAgJ1RpY2tldCBPbmUgVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgUXVldWVzID0+ICdSYXcnCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBRdWV1ZXMgPT4gJ1JhdycsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIExvY2tzID0+ICd1bmxvY2snLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgU3RhdGVzID0+ICduZXcnLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFByaW9yaXRpZXMgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgU29ydEJ5ICAgICA9PiAnVGlja2V0JywgICAgICAgICAgICAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ICAgID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgUXVldWVzICAgICA9PiBbJ0p1bmsnXSwKICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAnNjU0MzIxJyAuICRSYW5kb21JRCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElENF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVHlwZXMgPT4gWyAnVGVzdFR5cGUnIC4gJFJhbmRvbUlEIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDNdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN0YXRlcyA9PiBbJ25ldyddLAogICAgICAgICAgICBUaXRsZSAgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgU3RhdGVzICA9PiBbJ25ldyddLAogICAgICAgICAgICBUaXRsZSAgID0+ICcqJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgICAgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgPT4gJyogw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAnNjU0MzIxJyAuICRSYW5kb21JRCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElENF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgUHJpb3JpdGllcyA9PiBbJzEgdmVyeSBsb3cnXSwKICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEM10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQzLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQxJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ3RpY2tldDJfZmllbGQxJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQxJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBMaWtlID0+ICcqX2ZpZWxkMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvcnRCeSA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4KICAgICAgICAgICAgICAgICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCggU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lICksCiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4KICAgICAgICAgICAgICAgICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCggU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lICksCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElENCwgJFRpY2tldElEMywgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQ0LCAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlID0+CiAgICAgICAgICAgICAgICAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSArIDEgKSwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB1bmRlZiwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBMaW1pdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+CiAgICAgICAgICAgICAgICAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoIFN5c3RlbVRpbWUgPT4gJFN0YXJ0VGltZSApLAogICAgICAgICAgICBUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlID0+CiAgICAgICAgICAgICAgICAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoIFN5c3RlbVRpbWUgPT4gJFN0YXJ0VGltZSApLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICAgICAgTGltaXQgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQ0XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgRXNjYWxhdGlvblRpbWUgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRFc2NhbGF0aW9uVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0RXNjYWxhdGlvblJlc3BvbnNlVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBFc2NhbGF0aW9uVXBkYXRlVGltZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldEVzY2FsYXRpb25VcGRhdGVUaW1lTmV3ZXJNaW51dGVzID0+IDEyMCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IEVzY2FsYXRpb25Tb2x1dGlvblRpbWUgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRFc2NhbGF0aW9uU29sdXRpb25UaW1lTmV3ZXJNaW51dGVzID0+IDEyMCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAopOwoKIyBBZGQgYSB3cm9uZyB2YWx1ZSB0ZXN0IGZvciBlYWNoIHBvc3NpYmxlIHBhcmFtZXRlciBvbiBkaXJlY3Qgc2VhcmNoCgpmb3IgbXkgJEl0ZW0gKAogICAgcXcoVGlja2V0TnVtYmVyIFRpdGxlIEZyb20gVG8gQ2MgU3ViamVjdCBCb2R5IEN1c3RvbWVySUQgQ3VzdG9tZXJVc2VyTG9naW4gU3RhdGVUeXBlCiAgICBGdWxsdGV4dAogICAgKQogICAgKQp7CiAgICBteSAkRmFpbFRlc3QgPSB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgJEl0ZW0iLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAkSXRlbSA9PiAnTm90QVJlYWwnIC4gJEl0ZW0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB1bmRlZiwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9OwoKICAgICMgcHVzaCB0ZXN0CiAgICBwdXNoIEBUZXN0cywgJEZhaWxUZXN0Owp9CgojIEFycmF5cyBhcyBzdHJpbmdzCmZvciBteSAkSXRlbSAoCiAgICBxdyhTdGF0ZUlEcyBTdGF0ZVR5cGVJRHMgUXVldWVJRHMgUHJpb3JpdHlJRHMgT3duZXJJRHMKICAgIENyZWF0ZWRRdWV1ZUlEcyBDcmVhdGVkVXNlcklEcyBXYXRjaFVzZXJJRHMgUmVzcG9uc2libGVJRHMKICAgIFR5cGVJRHMgU2VydmljZUlEcyBTTEFJRHMgTG9ja0lEcyBRdWV1ZXMgVHlwZXMgU3RhdGVzCiAgICBQcmlvcml0aWVzIFNlcnZpY2VzIFNMQXMgTG9ja3MgQ3JlYXRlZFR5cGVzIENyZWF0ZWRVc2VySURzCiAgICBDcmVhdGVkVHlwZXMgQ3JlYXRlZFR5cGVJRHMgQ3JlYXRlZFByaW9yaXRpZXMKICAgIENyZWF0ZWRQcmlvcml0eUlEcyBDcmVhdGVkU3RhdGVzIENyZWF0ZWRTdGF0ZUlEcwogICAgQ3JlYXRlZFF1ZXVlcyBDcmVhdGVkUXVldWVJRHMKICAgICkKICAgICkKewogICAgbXkgJEZhaWxUZXN0ID0gewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICRJdGVtIiwKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgJEl0ZW0gPT4gJ05vdEFSZWFsJyAuICRJdGVtLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfTsKCiAgICAjIHB1c2ggdGVzdAogICAgcHVzaCBAVGVzdHMsICRGYWlsVGVzdDsKfQoKIyBBcnJheXMKZm9yIG15ICRJdGVtICgKICAgIHF3KFN0YXRlSURzIFN0YXRlVHlwZUlEcyBRdWV1ZUlEcyBQcmlvcml0eUlEcyBPd25lcklEcwogICAgQ3JlYXRlZFF1ZXVlSURzIENyZWF0ZWRVc2VySURzIFdhdGNoVXNlcklEcyBSZXNwb25zaWJsZUlEcwogICAgVHlwZUlEcyBTZXJ2aWNlSURzIFNMQUlEcyBMb2NrSURzIFF1ZXVlcyBUeXBlcyBTdGF0ZXMKICAgIFByaW9yaXRpZXMgU2VydmljZXMgU0xBcyBMb2NrcyBDcmVhdGVkVHlwZXMgQ3JlYXRlZFVzZXJJRHMKICAgIENyZWF0ZWRUeXBlcyBDcmVhdGVkVHlwZUlEcyBDcmVhdGVkUHJpb3JpdGllcwogICAgQ3JlYXRlZFByaW9yaXR5SURzIENyZWF0ZWRTdGF0ZXMgQ3JlYXRlZFN0YXRlSURzCiAgICBDcmVhdGVkUXVldWVzIENyZWF0ZWRRdWV1ZUlEcwogICAgKQogICAgKQp7CiAgICBteSAkRmFpbFRlc3QgPSB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgJEl0ZW0iLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAkSXRlbSA9PiBbCiAgICAgICAgICAgICAgICAnTm90QVJlYWwnIC4gJEl0ZW0gLiAnT25lJywKICAgICAgICAgICAgICAgICdOb3RBUmVhbCcgLiAkSXRlbSAuICdUd28nLAogICAgICAgICAgICAgICAgJ05vdEFSZWFsJyAuICRJdGVtIC4gJ1RocmVlJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHVuZGVmLAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH07CgogICAgIyBwdXNoIHRlc3QKICAgIHB1c2ggQFRlc3RzLCAkRmFpbFRlc3Q7Cn0KCiMgZGVidWdnZXIgb2JqZWN0Cm15ICREZWJ1Z2dlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXItPm5ldygKICAgIERlYnVnZ2VyQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgV2Vic2VydmljZUlEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIENvbW11bmljYXRpb25UeXBlID0+ICdQcm92aWRlcicsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkRGVidWdnZXJPYmplY3QsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcicsCiAgICAnRGVidWdnZXJPYmplY3QgaW5zdGFudGlhdGUgY29ycmVjdGx5JywKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBjcmVhdGUgbG9jYWwgb2JqZWN0CiAgICBteSAkTG9jYWxPYmplY3QgPSAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259Ii0+bmV3KAogICAgICAgIERlYnVnZ2VyT2JqZWN0ID0+ICREZWJ1Z2dlck9iamVjdCwKICAgICAgICBXZWJzZXJ2aWNlSUQgICA9PiAkV2Vic2VydmljZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OiRUZXN0LT57T3BlcmF0aW9ufSIsCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWJzZXJ2aWNlCiAgICBteSAkTG9jYWxSZXN1bHQgPSAkTG9jYWxPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkTG9jYWxSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIiwKICAgICk7CgogICAgIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdAogICAgbXkgJFJlcXVlc3Rlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICAgICByZWYgJFJlcXVlc3Rlck9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKICAgICk7CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2Vic2VydmljZQogICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkTmV3U2Vzc2lvbklELAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgICAgICB9CiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBzdHJ1Y3R1cmUgaXMgdmFsaWQiLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e1N1Y2Nlc3N9LAogICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHN1Y2Nlc3NmdWwgcmVzdWx0IiwKICAgICk7CgogICAgIyByZW1vdmUgRXJyb3JNZXNzYWdlIHBhcmFtZXRlciBmcm9tIGRpcmVjdCBjYWxsCiAgICAjIHJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdAogICAgaWYgKCAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgIGRlbGV0ZSAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9OwogICAgfQoKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhfSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzIHN0YXR1cyAobmVlZHMgY29uZmlndXJlZCBhbmQgcnVubmluZyB3ZWJzZXJ2ZXIpIiwKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e0V4cGVjdGVkUmV0dXJuTG9jYWxEYXRhfSApIHsKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJldHVybkxvY2FsRGF0YX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IG1hdGNoZWQgd2l0aCBleHBlY3RlZCBsb2NhbCBjYWxsIHJlc3VsdC4iLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJldHVyblJlbW90ZURhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iLAogICAgICAgICk7CiAgICB9Cgp9ICAgICNlbmQgbG9vcAoKIyBjbGVhbiB1cAoKIyBjbGVhbiB1cCB3ZWJzZXJ2aWNlCm15ICRXZWJzZXJ2aWNlRGVsZXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VEZWxldGUoCiAgICBJRCAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlRGVsZXRlLAogICAgIkRlbGV0ZWQgV2Vic2VydmljZSAkV2Vic2VydmljZUlEIiwKKTsKCmZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKCiAgICAjIGRlbGV0ZSB0aGUgdGlja2V0IFRocmVlCiAgICBteSAkVGlja2V0RGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldERlbGV0ZSwKICAgICAgICAiVGlja2V0RGVsZXRlKCkgc3VjY2Vzc2Z1bCBmb3IgVGlja2V0IElEICRUaWNrZXRJRCIsCiAgICApOwp9Cgpmb3IgbXkgJEZpZWxkSUQgKEBUZXN0RHluYW1pY0ZpZWxkcykgewoKICAgICMgZGVsZXRlIHRoZSBkeW5hbWljIGZpZWxkCiAgICBteSAkREZEZWxldGUgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgSUQgICAgICA9PiAkRmllbGRJRCwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgUmVvcmRlciA9PiAwLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERGRGVsZXRlLAogICAgICAgICJEeW5hbWljRmllbGREZWxldGUoKSBzdWNjZXNzZnVsIGZvciBGaWVsZCBJRCAkRmllbGRJRCIsCiAgICApOwp9CgpteSAkVXBkYXRlVXNlciA9ICRVc2VyT2JqZWN0LT5Vc2VyVXBkYXRlKAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgVXNlckZpcnN0bmFtZSA9PiAnVGVzdE1vZGlmaWVkJywKICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VzZXJNb2RpZmllZCcsCiAgICBVc2VyTG9naW4gICAgID0+ICdUZXN0VXNlcicgLiAkUmFuZG9tSUQsCiAgICBVc2VyRW1haWwgICAgID0+ICd0ZXN0bW9kaWZpZWQnIC4gJFJhbmRvbUlEIC4gJ2VtYWlsQGV4YW1wbGUuY29tJywKICAgIFZhbGlkSUQgICAgICAgPT4gMiwKICAgIENoYW5nZVVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFVwZGF0ZVVzZXIsCiAgICAiVXNlclVwZGF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFVzZXIgSUQgJFVzZXJJRCIsCik7CgpteSAkU3VjY2VzcyA9ICRUeXBlT2JqZWN0LT5UeXBlVXBkYXRlKAogICAgJVR5cGVEYXRhLAogICAgVmFsaWRJRCA9PiAyLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUeXBlVXBkYXRlKCkgc2V0IHR5cGUgJFR5cGVEYXRhe05hbWV9IHRvIGludmFsaWQiLAopOwoKMTsK
IyAtLQojIFRpY2tldFNMQVNldC50IC0gVGlja2V0U0xBU2V0IHRlc3RzY3JpcHQKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMWIyNjFhZDA2ZjhkZTQxOTA1MTBmMjhiOGEyNjBiZDYyNjY3MDVjYy9zY3JpcHRzL3Rlc3QvUHJvY2Vzc01hbmFnZW1lbnQvVHJhbnNpdGlvbkFjdGlvbi9UaWNrZXRTTEFTZXQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkSGVscGVyT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7Cm15ICRNb2R1bGVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRTTEFTZXQnKTsKCiMgZGVmaW5lIHZhcmlhYmxlcwpteSAkVXNlcklEICAgICA9IDE7Cm15ICRNb2R1bGVOYW1lID0gJ1RpY2tldFNMQVNldCc7Cm15ICRSYW5kb21JRCAgID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCiMgYWRkIGEgY3VzdG9tZXIgdXNlcgpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBzZXQgdXNlciBkZXRhaWxzCm15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RVc2VySUQgICAgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENyZWF0ZSBuZXcgc2VydmljZXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm15IEBTZXJ2aWNlcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlMCcgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlcykgewogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKCAleyRTZXJ2aWNlRGF0YX0gKTsKCiAgICAjIHNhbml0eSB0ZXN0CiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICB1bmRlZiwKICAgICAgICAiU2VydmljZUFkZCgpIGZvciAkU2VydmljZURhdGEtPntOYW1lfSwgU2VydmljZUlEIHNob3VsZCBub3QgYmUgdW5kZWYiLAogICAgKTsKCiAgICAjIHN0b3JlIHRoZSBTZXJ2aWNlSUQKICAgICRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0gPSAkU2VydmljZUlEOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDcmVhdGUgbmV3IFNMQXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm15IEBTTEFzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQTAnIC4gJFJhbmRvbUlELAogICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9IF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQTEnIC4gJFJhbmRvbUlELAogICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9IF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQTInIC4gJFJhbmRvbUlELAogICAgICAgIFNlcnZpY2VJRHMgPT4gW10sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICB9LAopOwoKZm9yIG15ICRTTEFEYXRhIChAU0xBcykgewogICAgbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKCAleyRTTEFEYXRhfSApOwoKICAgICMgc2FuaXR5IHRlc3QKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkU0xBSUQsCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlNMQUFkZCgpIGZvciAkU0xBRGF0YS0+e05hbWV9LCBTTEFJRCBzaG91bGQgbm90IGJlIHVuZGVmIiwKICAgICk7CgogICAgIyBzdG9yZSB0aGUgU0xBSUQKICAgICRTTEFEYXRhLT57U0xBSUR9ID0gJFNMQUlEOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lciAoMCBhbmQgMSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgdGVzdAokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoKSBmb3IgdXNlciAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLCBhbmQgU2VydmljZSAkU2VydmljZXNbMF0tPntOYW1lfSIKICAgICAgICAuICIgd2l0aCB0cnVlIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ3JlYXRlIGEgdGVzdCB0aWNrZXRzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpteSAkVGlja2V0SUQxID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVE4gICAgICAgICAgICA9PiB1bmRlZiwKICAgIFRpdGxlICAgICAgICAgPT4gJFNMQXNbMF0tPntTTEFJRH0sCiAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgVHlwZUlEICAgICAgICA9PiAxLAogICAgU2VydmljZSAgICAgICA9PiAkU2VydmljZXNbMF0tPntOYW1lfSwKICAgIFNMQSAgICAgICAgICAgPT4gdW5kZWYsCiAgICBDdXN0b21lcklEICAgID0+IHVuZGVmLAogICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgT3duZXJJRCAgICAgICA9PiAxLAogICAgUmVzcG9uc2libGVJRCA9PiAxLAogICAgQXJjaGl2ZUZsYWcgICA9PiB1bmRlZiwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiMgc2FuaXR5IGNoZWNrcwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRDEsCiAgICAiVGlja2V0Q3JlYXRlKCkgLSAkVGlja2V0SUQxIiwKKTsKCm15ICVUaWNrZXQxID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0MSApLAogICAgIlRpY2tldEdldCgpIC0gR2V0IFRpY2tldCB3aXRoIElEICRUaWNrZXRJRDEuIiwKKTsKCm15ICRUaWNrZXRJRDIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUTiAgICAgICAgICAgID0+IHVuZGVmLAogICAgVGl0bGUgICAgICAgICA9PiAndGVzdCcsCiAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgVHlwZUlEICAgICAgICA9PiAxLAogICAgU2VydmljZSAgICAgICA9PiB1bmRlZiwKICAgIFNMQSAgICAgICAgICAgPT4gdW5kZWYsCiAgICBDdXN0b21lcklEICAgID0+IHVuZGVmLAogICAgQ3VzdG9tZXJVc2VyICA9PiB1bmRlZiwKICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgIEFyY2hpdmVGbGFnICAgPT4gdW5kZWYsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgojIHNhbml0eSBjaGVja3MKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQyLAogICAgIlRpY2tldENyZWF0ZSgpIC0gJFRpY2tldElEMiIsCik7CgpteSAlVGlja2V0MiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICBVc2VySUQgICA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldDIgKSwKICAgICJUaWNrZXRHZXQoKSAtIEdldCBUaWNrZXQgd2l0aCBJRCAkVGlja2V0SUQyLiIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgUnVuKCkgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ05vIFBhcmFtcycsCiAgICAgICAgQ29uZmlnICA9PiB1bmRlZiwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVXNlcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBDdXN0b21lcklEID0+ICd0ZXN0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBUaWNrZXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gdW5kZWYsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBDdXN0b21lcklEID0+ICd0ZXN0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBDb25maWcnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4ge30sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBUaWNrZXQgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZyBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gMSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBTTEEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU0xBSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJ05vdEV4aXN0aW5nJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdOb3QgYXNzaWduZWQgU0xBJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSA9PiAkU0xBc1syXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vdCBBc3NpZ25lZCBTTEFJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1syXS0+e1NMQUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBzZXJ2aWNlIHdpdGggU0xBICRTTEFzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQyLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBzZXJ2aWNlIHdpdGggU0xBSUQgJFNMQXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDIsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1swXS0+e1NMQUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNMQSAkU0xBc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSA9PiAkU0xBc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU0xBICRTTEFzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICRTTEFzWzFdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTTEFJRCAkU0xBc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQUlEID0+ICRTTEFzWzBdLT57U0xBSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU0xBSUQgJFNMQXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1swXS0+e1NMQUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFRpY2tldC0+VGl0bGUiLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJzxPVFJTX1RJQ0tFVF9UaXRsZT4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVGlja2V0LT5Ob3RFeGlzdGluZyIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAnPE9UUlNfVElDS0VUX05vdEV4aXN0aW5nPicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBVc2luZyBEaWZmZXJlbnQgVXNlcklEIiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSAgICA9PiAkU0xBc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBtYWtlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICBteSAkT3JpZ1Rlc3QgPSBTdG9yYWJsZTo6ZGNsb25lKCRUZXN0KTsKCiAgICBteSAkU3VjY2VzcyA9ICRNb2R1bGVPYmplY3QtPlJ1bigKICAgICAgICAleyAkVGVzdC0+e0NvbmZpZ30gfSwKICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgICAgICAgPT4gJ1AxJywKICAgICAgICBBY3Rpdml0eUVudGl0eUlEICAgICAgICAgPT4gJ0ExJywKICAgICAgICBUcmFuc2l0aW9uRW50aXR5SUQgICAgICAgPT4gJ1QxJywKICAgICAgICBUcmFuc2l0aW9uQWN0aW9uRW50aXR5SUQgPT4gJ1RBMScsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTdWNjZXNzfSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4Y2VjdXRlZCB3aXRoIFRydWUiCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGlja2V0CiAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldElEMTsKICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1RpY2tldH0tPntUaWNrZXRJRH0gZXEgJFRpY2tldElEMiApIHsKICAgICAgICAgICAgJFRpY2tldElEID0gJFRpY2tldElEMjsKICAgICAgICB9CiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9IH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBleGlzdHMgd2l0aCBUcnVlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRFeHBlY3RlZFZhbHVlID0gJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9CiAgICAgICAgICAgICAgICA9fiBte1xBPE9UUlNfVElDS0VUXyhbQS1aYS16MC05X10rKT5cen1tc3gKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEV4cGVjdGVkVmFsdWUgPSAkVGlja2V0eyQxfSAvLyAnJzsKICAgICAgICAgICAgICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSB2YWx1ZTogJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSBzaG91bGQgYmVlbiByZXBsYWNlZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEV4cGVjdGVkVmFsdWUsCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSBmb3IgVGlja2V0SUQ6IgogICAgICAgICAgICAgICAgICAgIC4gIiAkVGlja2V0SUQgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPntVc2VySUR9LAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogVXNlcklEIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBzaG91bGQgYmUgcmVtb3ZlZCAoYXMgaXQgd2FzIHVzZWQpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4ZWN1dGVkIHdpdGggRmFsc2UiCiAgICAgICAgKTsKICAgIH0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRGVzdHJ1Y3RvcnMgdG8gcmVtb3ZlIG91ciBUZXN0aXRlbXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIFRpY2tldHMKbXkgJERlbGV0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICREZWxldGUsCiAgICAiVGlja2V0RGVsZXRlKCkgLSAkVGlja2V0SUQyIiwKKTsKCiREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRGVsZXRlLAogICAgIlRpY2tldERlbGV0ZSgpIC0gJFRpY2tldElEMiIsCik7CgojIFNMQQpmb3IgbXkgJFNMQURhdGEgKEBTTEFzKSB7CiAgICBteSAkU3VjY2VzcyA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICAgICAleyRTTEFEYXRhfSwKICAgICAgICBWYWxpZElEID0+IDIsCiAgICApOwoKICAgICMgc2FuaXR5IHRlc3QKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJTTEFVcGRhdGUoKSBmb3IgJFNMQURhdGEtPntOYW1lfSwgU2V0IFNMQSB0byBpbnZhbGlkIHdpdGggdHJ1ZSIsCiAgICApOwp9CgojIFNlcnZpY2VzCmZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlcykgewogICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAleyRTZXJ2aWNlRGF0YX0sCiAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgKTsKCiAgICAjIHNhbml0eSB0ZXN0CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiU2VydmljZVVwZGF0ZSgpIGZvciAkU2VydmljZURhdGEtPntOYW1lfSwgU2V0IHNlcnZpY2UgdG8gaW52YWxpZCB3aXRoIHRydWUiLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoxOwo=
IyAtLQojIFRpY2tldFNlcnZpY2VTZXQudCAtIFRpY2tldFNlcnZpY2VTZXQgdGVzdHNjcmlwdAojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8xYjI2MWFkMDZmOGRlNDE5MDUxMGYyOGI4YTI2MGJkNjI2NjcwNWNjL3NjcmlwdHMvdGVzdC9Qcm9jZXNzTWFuYWdlbWVudC9UcmFuc2l0aW9uQWN0aW9uL1RpY2tldFNlcnZpY2VTZXQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkSGVscGVyT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKbXkgJE1vZHVsZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFNlcnZpY2VTZXQnKTsKCiMgZGVmaW5lIHZhcmlhYmxlcwpteSAkVXNlcklEICAgICA9IDE7Cm15ICRNb2R1bGVOYW1lID0gJ1RpY2tldFNlcnZpY2VTZXQnOwpteSAkUmFuZG9tSUQgICA9ICRIZWxwZXJPYmplY3QtPkdldFJhbmRvbUlEKCk7CgojIGFkZCBhIGN1c3RvbWVyIHVzZXIKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgc2V0IHVzZXIgZGV0YWlscwpteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0VXNlcklEICAgID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDcmVhdGUgbmV3IHNlcnZpY2VzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpteSBAU2VydmljZXMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTAnIC4gJFJhbmRvbUlELAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTEnIC4gJFJhbmRvbUlELAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTInIC4gJFJhbmRvbUlELAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgIH0sCik7Cgpmb3IgbXkgJFNlcnZpY2VEYXRhIChAU2VydmljZXMpIHsKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCggJXskU2VydmljZURhdGF9ICk7CgogICAgIyBzYW5pdHkgdGVzdAogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlNlcnZpY2VBZGQoKSBmb3IgJFNlcnZpY2VEYXRhLT57TmFtZX0sIFNlcnZpY2VJRCBzaG91bGQgbm90IGJlIHVuZGVmIiwKICAgICk7CgogICAgIyBzdG9yZSB0aGUgU2VydmljZUlECiAgICAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9ID0gJFNlcnZpY2VJRDsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBc3NpZ24gc2VydmljZXMgdG8gY3VzdG9tZXIgKDAgYW5kIDEpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgokU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1sxXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzFdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENyZWF0ZSBhIHRlc3QgdGlja2V0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbXkgJFRpY2tldElEMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFROICAgICAgICAgICAgPT4gdW5kZWYsCiAgICBUaXRsZSAgICAgICAgID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgVHlwZUlEICAgICAgICA9PiAxLAogICAgU2VydmljZSAgICAgICA9PiB1bmRlZiwKICAgIFNMQSAgICAgICAgICAgPT4gdW5kZWYsCiAgICBDdXN0b21lcklEICAgID0+IHVuZGVmLAogICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgT3duZXJJRCAgICAgICA9PiAxLAogICAgUmVzcG9uc2libGVJRCA9PiAxLAogICAgQXJjaGl2ZUZsYWcgICA9PiB1bmRlZiwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiMgc2FuaXR5IGNoZWNrcwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRDEsCiAgICAiVGlja2V0Q3JlYXRlKCkgLSAkVGlja2V0SUQxIiwKKTsKCm15ICVUaWNrZXQxID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0MSApLAogICAgIlRpY2tldEdldCgpIC0gR2V0IFRpY2tldCB3aXRoIElEICRUaWNrZXRJRDEuIiwKKTsKCm15ICRUaWNrZXRJRDIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUTiAgICAgICAgICAgID0+IHVuZGVmLAogICAgVGl0bGUgICAgICAgICA9PiAndGVzdCcsCiAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgVHlwZUlEICAgICAgICA9PiAxLAogICAgU2VydmljZSAgICAgICA9PiB1bmRlZiwKICAgIFNMQSAgICAgICAgICAgPT4gdW5kZWYsCiAgICBDdXN0b21lcklEICAgID0+IHVuZGVmLAogICAgQ3VzdG9tZXJVc2VyICA9PiB1bmRlZiwKICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgIEFyY2hpdmVGbGFnICAgPT4gdW5kZWYsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgojIHNhbml0eSBjaGVja3MKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQyLAogICAgIlRpY2tldENyZWF0ZSgpIC0gJFRpY2tldElEMiIsCik7CgpteSAlVGlja2V0MiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICBVc2VySUQgICA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldDIgKSwKICAgICJUaWNrZXRHZXQoKSAtIEdldCBUaWNrZXQgd2l0aCBJRCAkVGlja2V0SUQyLiIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgUnVuKCkgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ05vIFBhcmFtcycsCiAgICAgICAgQ29uZmlnICA9PiB1bmRlZiwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVXNlcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBDdXN0b21lcklEID0+ICd0ZXN0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBUaWNrZXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gdW5kZWYsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBDdXN0b21lcklEID0+ICd0ZXN0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBDb25maWcnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4ge30sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBUaWNrZXQgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBDb25maWcgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IDEsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU2VydmljZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU2VydmljZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vdCBhc3NpZ25lZCBTZXJ2aWNlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VzWzJdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm90IEFzc2lnbmVkIFNlcnZpY2VJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzJdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBjdXN0b21lciB3aXRoIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQyLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIlRpY2tldCB3aXRob3V0IGN1c3RvbWVyIHdpdGggU2VydmljZUlEICRTZXJ2aWNlc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MiwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZSAkU2VydmljZXNbMF0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZSAkU2VydmljZXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1sxXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZUlEICRTZXJ2aWNlc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZUlEICRTZXJ2aWNlc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0MSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXNbMV0tPntTZXJ2aWNlSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVGlja2V0LT5UaXRsZSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJzxPVFJTX1RJQ0tFVF9UaXRsZT4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIldyb25nIFRpY2tldC0+Tm90RXhpc3RpbmciLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICc8T1RSU19USUNLRVRfTm90RXhpc3Rpbmc+JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFVzaW5nIERpZmZlcmVudCBVc2VySUQiLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQxLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZSA9PiAkU2VydmljZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIG1ha2UgYSBkZWVwIGNvcHkgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGRlZmluaXRpb24KICAgIG15ICRPcmlnVGVzdCA9IFN0b3JhYmxlOjpkY2xvbmUoJFRlc3QpOwoKICAgIG15ICRTdWNjZXNzID0gJE1vZHVsZU9iamVjdC0+UnVuKAogICAgICAgICV7ICRUZXN0LT57Q29uZmlnfSB9LAogICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgICAgICAgICA9PiAnUDEnLAogICAgICAgIEFjdGl2aXR5RW50aXR5SUQgICAgICAgICA9PiAnQTEnLAogICAgICAgIFRyYW5zaXRpb25FbnRpdHlJRCAgICAgICA9PiAnVDEnLAogICAgICAgIFRyYW5zaXRpb25BY3Rpb25FbnRpdHlJRCA9PiAnVEExJywKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhjZWN1dGVkIHdpdGggVHJ1ZSIKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0SUQxOwogICAgICAgIGlmICggJFRlc3QtPntDb25maWd9LT57VGlja2V0fS0+e1RpY2tldElEfSBlcSAkVGlja2V0SUQyICkgewogICAgICAgICAgICAkVGlja2V0SUQgPSAkVGlja2V0SUQyOwogICAgICAgIH0KICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30gfSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIiRNb2R1bGVOYW1lIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBBdHRyaWJ1dGU6ICRBdHRyaWJ1dGUgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIGV4aXN0cyB3aXRoIFRydWUiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEV4cGVjdGVkVmFsdWUgPSAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0KICAgICAgICAgICAgICAgID1+IG17XEE8T1RSU19USUNLRVRfKFtBLVphLXowLTlfXSspPlx6fW1zeAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSA9ICRUaWNrZXR7JDF9IC8vICcnOwogICAgICAgICAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIHZhbHVlOiAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9IHNob3VsZCBiZWVuIHJlcGxhY2VkIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBtYXRjaCBleHBlY3RlZCB2YWx1ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57VXNlcklEfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiBVc2VySUQgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIHNob3VsZCBiZSByZW1vdmVkIChhcyBpdCB3YXMgdXNlZCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhlY3V0ZWQgd2l0aCBGYWxzZSIKICAgICAgICApOwogICAgfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBEZXN0cnVjdG9ycyB0byByZW1vdmUgb3VyIFRlc3RpdGVtcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgVGlja2V0cwpteSAkRGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJERlbGV0ZSwKICAgICJUaWNrZXREZWxldGUoKSAtICRUaWNrZXRJRDIiLAopOwoKJERlbGV0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICREZWxldGUsCiAgICAiVGlja2V0RGVsZXRlKCkgLSAkVGlja2V0SUQyIiwKKTsKCiMgU2VydmljZXMKZm9yIG15ICRTZXJ2aWNlRGF0YSAoQFNlcnZpY2VzKSB7CiAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICV7JFNlcnZpY2VEYXRhfSwKICAgICAgICBWYWxpZElEID0+IDIsCiAgICApOwoKICAgICMgc2FuaXR5IHRlc3QKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJTZXJ2aWNlVXBkYXRlKCkgZm9yICRTZXJ2aWNlRGF0YS0+e05hbWV9LCBTZXQgc2VydmljZSB0byBpbnZhbGlkIHdpdGggdHJ1ZSIsCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjE7Cg==
IyAtLQojIFRpY2tldEFDTC50IC0gVGlja2V0IEFjY2VzcyBDb250cm9sIExpc3RzIHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzFiMjYxYWQwNmY4ZGU0MTkwNTEwZjI4YjhhMjYwYmQ2MjY2NzA1Y2Mvc2NyaXB0cy90ZXN0L1RpY2tldC9UaWNrZXRBQ0wudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJEhlbHBlck9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFZhbGlkT2JqZWN0ICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKbXkgJFNlcnZpY2VPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFF1ZXVlT2JqZWN0ICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7Cm15ICRUeXBlT2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7Cm15ICRQcmlvcml0eU9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwpteSAkU0xBT2JqZWN0ICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRTdGF0ZU9iamVjdCAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwpteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15ICREeW5hbWljRmllbGRWYWx1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpOwoKIyBzZXQgdmFsaWQgb3B0aW9ucwpteSAlVmFsaWRMaXN0ID0gJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKTsKJVZhbGlkTGlzdCA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiMgc2V0IHVzZXIgb3B0aW9ucwpteSAkVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWydhZG1pbiddLAopIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCm15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAopOwpteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKbXkgJE5ld1VzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgpteSAkTmV3VXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJE5ld1VzZXJMb2dpbiwKKTsKbXkgJU5ld1VzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgVXNlcklEID0+ICROZXdVc2VySUQsCik7CgojIHNldCBjdXN0b21lciB1c2VyIG9wdGlvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgpteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICBVc2VyID0+ICRDdXN0b21lclVzZXJMb2dpbiwKKTsKCm15ICROZXdDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKQogICAgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGN1c3RvbWVyIHVzZXIiOwoKbXkgJU5ld0N1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkTmV3Q3VzdG9tZXJVc2VyTG9naW4sCik7CgojIHNldCBoZWxwZXIgb3B0aW9ucwpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyBzZXQgcXVldWUgb3B0aW9ucwpteSAkUXVldWVOYW1lID0gJ1F1ZXVlXycgLiAkUmFuZG9tSUQ7Cm15ICRRdWV1ZUlEICAgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICBWYWxpZElEICAgICAgICAgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRRdWV1ZUlELAogICAgIlF1ZXVlQWRkKCkgSUQgKCRRdWV1ZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAlUXVldWVEYXRhID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUdldCgKICAgIElEICAgICA9PiAkUXVldWVJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKbXkgJE5ld1F1ZXVlTmFtZSA9ICdOZXdRdWV1ZV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3UXVldWVJRCAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCgKICAgIE5hbWUgICAgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgVmFsaWRJRCAgICAgICAgID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3UXVldWVJRCwKICAgICJRdWV1ZUFkZCgpIElEICgkTmV3UXVldWVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJU5ld1F1ZXVlRGF0YSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoCiAgICBJRCAgICAgPT4gJE5ld1F1ZXVlSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgc2V0IHNlcnZpY2Ugb3B0aW9ucwpteSAkU2VydmljZU5hbWUgPSAnU2VydmljZV8nIC4gJFJhbmRvbUlEOwpteSAkU2VydmljZUlEICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlELAogICAgIlNlcnZpY2VBZGQoKSBJRCAoJFNlcnZpY2VJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKbXkgJE5ld1NlcnZpY2VOYW1lID0gJ05ld1NlcnZpY2VfJyAuICRSYW5kb21JRDsKbXkgJE5ld1NlcnZpY2VJRCAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICROZXdTZXJ2aWNlTmFtZSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1NlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgSUQgKCROZXdTZXJ2aWNlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICVOZXdTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgU2VydmljZUlEID0+ICROZXdTZXJ2aWNlSUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgc2V0IHR5cGUgb3B0aW9ucwpteSAkVHlwZU5hbWUgPSAnVHlwZV8nIC4gJFJhbmRvbUlEOwpteSAkVHlwZUlEICAgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJFR5cGVOYW1lLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlELAogICAgIlR5cGVBZGQoKSBJRCAoJFR5cGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJVR5cGVEYXRhID0gJFR5cGVPYmplY3QtPlR5cGVHZXQoCiAgICBJRCAgICAgPT4gJFR5cGVJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKbXkgJE5ld1R5cGVOYW1lID0gJ05ld1R5cGVfJyAuICRSYW5kb21JRDsKbXkgJE5ld1R5cGVJRCAgID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICROZXdUeXBlTmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1R5cGVJRCwKICAgICJUeXBlQWRkKCkgSUQgKCROZXdUeXBlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICVOZXdUeXBlRGF0YSA9ICRUeXBlT2JqZWN0LT5UeXBlR2V0KAogICAgSUQgICAgID0+ICROZXdUeXBlSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgc2V0IHByaW9yaXR5IG9wdGlvbnMKbXkgJFByaW9yaXR5TmFtZSA9ICdQcmlvcml0eV8nIC4gJFJhbmRvbUlEOwpteSAkUHJpb3JpdHlJRCAgID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJFByaW9yaXR5TmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFByaW9yaXR5SUQsCiAgICAiUHJpb3JpdHlBZGQoKSBJRCAoJFByaW9yaXR5SUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICVQcmlvcml0eURhdGEgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5R2V0KAogICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdHlJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKbXkgJE5ld1ByaW9yaXR5TmFtZSA9ICdOZXdQcmlvcml0eV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3UHJpb3JpdHlJRCAgID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1ByaW9yaXR5SUQsCiAgICAiUHJpb3JpdHlBZGQoKSBJRCAoJE5ld1ByaW9yaXR5SUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICVOZXdQcmlvcml0eURhdGEgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5R2V0KAogICAgUHJpb3JpdHlJRCA9PiAkTmV3UHJpb3JpdHlJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgc2V0IFNMQSBvcHRpb25zCm15ICRTTEFOYW1lID0gJ1NMQV8nIC4gJFJhbmRvbUlEOwpteSAkU0xBSUQgICA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgPT4gJFNMQU5hbWUsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTTEFJRCwKICAgICJTTEFBZGQoKSBJRCAoJFNMQUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAlU0xBRGF0YSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKbXkgJE5ld1NMQU5hbWUgPSAnTmV3U0xBXycgLiAkUmFuZG9tSUQ7Cm15ICROZXdTTEFJRCAgID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgTmFtZSAgICA9PiAkTmV3U0xBTmFtZSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1NMQUlELAogICAgIlNMQUFkZCgpIElEICgkTmV3U0xBSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICVOZXdTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgU0xBSUQgID0+ICRTTEFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBzZXQgc3RhdGUgb3B0aW9ucwpteSAkU3RhdGVOYW1lID0gJ1N0YXRlXycgLiAkUmFuZG9tSUQ7Cm15ICRTdGF0ZUlEICAgPSAkU3RhdGVPYmplY3QtPlN0YXRlQWRkKAogICAgTmFtZSAgICA9PiAkU3RhdGVOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVHlwZUlEICA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIElEICgkU3RhdGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICBJRCAgICAgPT4gJFN0YXRlSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKbXkgJE5ld1N0YXRlTmFtZSA9ICdOZXdTdGF0ZV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3U3RhdGVJRCAgID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFR5cGVJRCAgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1N0YXRlSUQsCiAgICAiU3RhdGVBZGQoKSBJRCAoJE5ld1N0YXRlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICVOZXdTdGF0ZURhdGEgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgSUQgICAgID0+ICROZXdTdGF0ZUlELAogICAgVXNlcklEID0+IDEsCik7CgojIHNldCBkeW5hbWljX2ZpZWxkIG9wdGlvbnMKbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAnRHluYW1pY0ZpZWxkJyAuICRSYW5kb21JRDsKbXkgJER5bmFtaWNGaWVsZElEICAgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICBOYW1lICAgICAgID0+ICREeW5hbWljRmllbGROYW1lLAogICAgTGFiZWwgICAgICA9PiAnYSBkZXNjcmlwdGlvbicsCiAgICBGaWVsZE9yZGVyID0+IDk5OTk5LAogICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgIH0sCiAgICBSZW9yZGVyID0+IDAsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICREeW5hbWljRmllbGRJRCwKICAgICJEeW5hbWljRmllbGRBZGQoKSBJRCAoJER5bmFtaWNGaWVsZElEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkRHluYW1pY0ZpZWxkRGF0YSA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgIElEICAgICA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgVE9ETyBpbnRlZ3JhdGUgdGhpcyB0ZXN0cyB3aXRoIGRhdGFiYXNlIHRlc3RzCiMgc2V0IHRlc3RpbmcgQUNMcyBvcHRpb25zCm15ICVUZXN0QUNMcyA9ICgKICAgICdRdWV1ZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnU2VydmljZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNlcnZpY2VOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1R5cGUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRUeXBlTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ0N1c3RvbWVyVXNlci0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdQcmlvcml0eS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdTTEEtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNMQU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnU3RhdGUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnT3duZXItMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnUmVzcG9uc2libGUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnRnJvbnRlbmQtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBGcm9udGVuZCA9PiB7CiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWyAnQWdlbnRUaWNrZXRQaG9uZScsICdBZ2VudFRpY2tldEVtYWlsJyBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnVGlja2V0LTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgQWN0aW9uID0+IFsgJ0FnZW50VGlja2V0UGhvbmUnLCAnQWdlbnRUaWNrZXRCb3VuY2UnLCBdLAogICAgICAgIH0sCiAgICB9LAogICAgJ0R5bmFtaWNGaWVsZC0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfRmllbGQxID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1RpY2tldEFjbCcsCiAgICBWYWx1ZSA9PiBcJVRlc3RBQ0xzLAopOwoKbXkgJEdvdEFDTHMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFjbCcpOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPklzRGVlcGx5KAogICAgJEdvdEFDTHMsCiAgICBcJVRlc3RBQ0xzLAogICAgIkFDTHMgU2V0IGFuZCBHZXQgZnJvbSBzeXNjb25maWciLAopOwoKbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiMgc2V0IHRpY2tldCBvcHRpb25zCm15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgIFF1ZXVlICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgIFNlcnZpY2UgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgVHlwZSAgICAgICAgICA9PiAkVHlwZU5hbWUsCiAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgICA9PiAkUHJpb3JpdHlOYW1lLAogICAgU0xBICAgICAgICAgICA9PiAkU0xBTmFtZSwKICAgIFN0YXRlICAgICAgICAgPT4gJFN0YXRlTmFtZSwKICAgIEN1c3RvbWVySUQgICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgID0+ICRDdXN0b21lclVzZXJMb2dpbiwKICAgIE93bmVySUQgICAgICAgPT4gJFVzZXJJRCwKICAgIFJlc3BvbnNpYmxlSUQgPT4gJFVzZXJJRCwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElELAogICAgIlRpY2tldENyZWF0ZSgpIElEICgkVGlja2V0SUQpIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IiwKKTsKCiMgc2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlCm15ICREeW5hbWljRmllbGRWYWx1ZVNldFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QtPlZhbHVlU2V0KAogICAgRmllbGRJRCAgPT4gJER5bmFtaWNGaWVsZElELAogICAgT2JqZWN0SUQgPT4gJFRpY2tldElELAogICAgVmFsdWUgICAgPT4gWwogICAgICAgIHsKICAgICAgICAgICAgVmFsdWVUZXh0ID0+ICdJdGVtMScsCiAgICAgICAgfSwKICAgIF0sCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJER5bmFtaWNGaWVsZFZhbHVlU2V0U3VjY2VzcywKICAgICJEeW5hbWljRmllbGQgVmFsdWVTZXQoKSBmb3IgRHluYW1pY0ZpZWxkIElEICgkRHluYW1pY0ZpZWxkSUQpLCBUaWNrZXQgSUQgKCRUaWNrZXRJRCkiCiAgICAgICAgLiAic2V0IHN1Y2Nlc3NmdWxseSIsCik7CgojIGRlZmluZSBmb3JtIHVwZGF0ZSBiYXNlZCB0ZXN0cwpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIHdyb25nIFF1ZXVlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyByZXR1cm4gdHlwZSAoQWN0aW9uKScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1dyb25nJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDAsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIHdyb25nIHJldHVybiB0eXBlIChOb24gQWN0aW9uKScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1dyb25nJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIHdyb25nIHJldHVybiBzdWIgdHlwZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1dyb25nJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSBjb3JyZWN0IFF1ZXVlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIGNvcnJlY3QgUXVldWVJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTZXJ2aWNlLTEgLSBjb3JyZWN0IFNlcnZpY2UnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU2VydmljZS0xIC0gY29ycmVjdCBTZXJ2aWNlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFR5cGUtMSAtIGNvcnJlY3QgVHlwZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJFR5cGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFR5cGUtMSAtIGNvcnJlY3QgVHlwZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIEN1c3RvbWVyVXNlci0xIC0gY29ycmVjdCBDdXN0b21lclVzZXInLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFByaW9yaXR5LTEgLSBjb3JyZWN0IFByaW9yaXR5JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkUHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFByaW9yaXR5LTEgLSBjb3JyZWN0IFByaW9yaXR5SUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFNMQS0xIC0gY29ycmVjdCBTTEEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU0xBLTEgLSBjb3JyZWN0IFNMQUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTdGF0ZS0xIC0gY29ycmVjdCBTdGF0ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJFN0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTdGF0ZS0xIC0gY29ycmVjdCBTdGF0ZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBPd25lci0xIC0gY29ycmVjdCBPd25lcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgT3duZXIgICAgICAgICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBPd25lci0xIC0gY29ycmVjdCBPd25lcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkVXNlcklELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBSZXNwb25zaWJsZS0xIC0gY29ycmVjdCBSZXNwb25zaWJsZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFJlc3BvbnNpYmxlLTEgLSBjb3JyZWN0IFJlc3BvbnNpYmxlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBGcm9udGVuZC0xIC0gY29ycmVjdCBBY3Rpb24nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgVGlja2V0LTEgLSBjb3JyZWN0IFRpY2tldCB1c2luZyBBY3Rpb24nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gJy0nLAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDEsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7CiAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0UGhvbmUnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFRpY2tldC0xIC0gY29ycmVjdCBUaWNrZXQgdXNpbmcgRGF0YScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgICAgIDIgPT4gJ0FnZW50VGlja2V0Qm91bmNlJywKICAgICAgICAgICAgICAgIDMgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4gewogICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgMiA9PiAnQWdlbnRUaWNrZXRCb3VuY2UnLAogICAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBEeW5hbWljRmllbGQtMSAtIGNvcnJlY3QgRHluYW1pY0ZpZWxkJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgRHluYW1pY0ZpZWxkICA9PiB7CiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfRmllbGQxID0+IFsnSXRlbTEnXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgIG15ICRDb25maWcgICAgID0gJFRlc3QtPntDb25maWd9OwogICAgbXkgJEFDTFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgaWYgKCAhJFRlc3QtPntTdWNjZXNzTWF0Y2h9ICkgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJEFDTFN1Y2Nlc3MsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IGV4ZWN1dGVkIHdpdGggRmFsc2UiLAogICAgICAgICk7CgogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRBQ0xTdWNjZXNzLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBleGVjdXRlZCB3aXRoIFRydWUiLAogICAgICAgICk7CgogICAgICAgIGlmICggJFRlc3QtPntDb25maWd9LT57UmV0dXJuVHlwZX0gZXEgJ0FjdGlvbicgKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgYWN0aW9uIGRhdGEgZnJvbSBBQ0wKICAgICAgICAgICAgbXkgJUFDTEFjdGlvbkRhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xBY3Rpb25EYXRhKCk7CgogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICBcJUFDTEFjdGlvbkRhdGEsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1JldHVybkFjdGlvbkRhdGF9LAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMIGFjdGlvbiBkYXRhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGRhdGEgZnJvbSBBQ0wKICAgICAgICAgICAgbXkgJUFDTERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICBcJUFDTERhdGEsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1JldHVybkRhdGF9LAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMIGRhdGEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKJFNlbGYtPlRydWUoCiAgICAxLAogICAgIi0tLSBTdGFydCBEYXRhYmFzZSBBQ0wgVGVzdHMgLS0tIiwKKTsKCiMgZGVmaW5lIHRoZSBkYXRhYmFzZSB0ZXN0cwpAVGVzdHMgPSAoCgogICAgIyBxdWV1ZSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1RdWV1ZS0xIC0gU2VudCBuZXcgcXVldWUsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVF1ZXVlLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1RdWV1ZS0xIC0gU2VudCBuZXcgcXVldWUsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUXVldWUtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1RdWV1ZS0xIC0gU2VudCBuZXcgcXVldWUsIFdyb25nIFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUXVldWUtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1RdWV1ZS0xIC0gU2VudCBuZXcgcXVldWUsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVF1ZXVlLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3UXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBzZXJ2aWNlIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNlcnZpY2UtMSAtIFNlbnQgbmV3IHNlcnZpY2UsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNlcnZpY2UtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U2VydmljZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAkTmV3U2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNlcnZpY2UtMSAtIFNlbnQgbmV3IHNlcnZpY2UsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU2VydmljZS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTZXJ2aWNlICAgICAgID0+ICROZXdTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNlcnZpY2UtMSAtIFNlbnQgbmV3IHNlcnZpY2UsIFdyb25nIFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TZXJ2aWNlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU2VydmljZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAkTmV3U2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNlcnZpY2UtMSAtIFNlbnQgbmV3IHNlcnZpY2UsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNlcnZpY2UtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1NlcnZpY2VOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTZXJ2aWNlICAgICAgID0+ICROZXdTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHR5cGUgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVHlwZS0xIC0gU2VudCBuZXcgdHlwZSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVHlwZS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdUeXBlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICA9PiAkTmV3VHlwZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVR5cGUtMSAtIFNlbnQgbmV3IHR5cGUsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UeXBlLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFR5cGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ01pc2MnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICA9PiAkTmV3VHlwZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UeXBlLTEgLSBTZW50IG5ldyB0eXBlLCBXcm9uZyBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVHlwZS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskVHlwZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFR5cGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICROZXdUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVHlwZS0xIC0gU2VudCBuZXcgdHlwZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVHlwZS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3VHlwZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFR5cGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICROZXdUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKCiAgICAjIGN1c3RvbWVyIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUN1c3RvbWVyVXNlci0xIC0gU2V0IG5ldyBDdXN0b21lclVzZXIsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUN1c3RvbWVyVXNlci0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3Q3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICROZXdDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1DdXN0b21lclVzZXItMSAtIFNldCBuZXcgQ3VzdG9tZXJVc2VyLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUN1c3RvbWVyVXNlci0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskQ3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJE5ld0N1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUN1c3RvbWVyVXNlci0xIC0gU2V0IG5ldyBDdXN0b21lclVzZXIsIFdyb25nIFByb3BlcmllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUN1c3RvbWVyVXNlci0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskQ3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICROZXdDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1DdXN0b21lclVzZXItMSAtIFNldCBuZXcgQ3VzdG9tZXJVc2VyLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1DdXN0b21lclVzZXItMS1TJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkTmV3Q3VzdG9tZXJVc2VyRGF0YXtVc2VySUR9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBwcmlvcml0eSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Qcmlvcml0eS0xIC0gU2VudCBuZXcgcHJpb3JpdHksIFdyb25nIFByb3BlcnRpZXM6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3UHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVByaW9yaXR5LTEgLSBTZW50IG5ldyBwcmlvcml0eSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUHJpb3JpdHktMSAtIFNlbnQgbmV3IHByaW9yaXR5LCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUHJpb3JpdHktMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUHJpb3JpdHktMSAtIFNlbnQgbmV3IHByaW9yaXR5LCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHNsYSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TTEEtMSAtIFNlbnQgbmV3IFNMQSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU0xBICAgICAgICAgICA9PiAkTmV3U0xBTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU0xBLTEgLSBTZW50IG5ldyBTTEEsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICROZXdTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU0xBLTEgLSBTZW50IG5ldyBTTEEsIFdyb25nIFByb3BldGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TTEEtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICROZXdTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TTEEtMSAtIFNlbnQgbmV3IFNMQSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1NMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU0xBICAgICAgICAgICA9PiAkTmV3U0xBTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHN0YXRlIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU3RhdGUtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1N0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TdGF0ZS0xIC0gU2VudCBuZXcgc3RhdGUsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TdGF0ZS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ0p1bmsnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVN0YXRlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TdGF0ZS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1N0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgb3duZXIgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLU93bmVyLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydjbG9zZWQnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPd25lciAgICAgICAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLU93bmVyLTEgLSBTZW50IG5ldyBvd25lciwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyByZXNwb25zaWJsZSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVJlc3BvbnNpYmxlLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUmVzcG9uc2libGUtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ2Nsb3NlZCddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVJlc3BvbnNpYmxlLTEgLSBTZW50IG5ldyByZXNwb25zaWJsZSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVJlc3BvbnNpYmxlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUmVzcG9uc2libGUtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBSZXNwb25zaWJsZSAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBmcm9udGVuZCBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Gcm9udGVuZC0xIC0gY29ycmVjdCBBY3Rpb246ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Gcm9udGVuZC0xJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEZyb250ZW5kID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+IFsgJ0FnZW50VGlja2V0UGhvbmUnLCAnQWdlbnRUaWNrZXRFbWFpbCcgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aWNrZXQgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVGlja2V0LTEgLSBTZW50IG5ldyBwYXJhbXMsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZSA6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVRpY2tldC0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyROZXdRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskTmV3U3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWydBZ2VudFRpY2tldENvbXBvc2UnXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAoKICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMCwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVGlja2V0LTEgLSBTZW50IG5ldyBwYXJhbXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVGlja2V0LTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbICdBZ2VudFRpY2tldENsb3NlJywgJ0FnZW50VGlja2V0Qm91bmNlJywgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAoKICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHsKICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVRpY2tldC0xIC0gU2VudCBuZXcgcGFyYW1zLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UaWNrZXQtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbJ0FnZW50VGlja2V0Q29tcG9zZSddLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAwLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UaWNrZXQtMiAtIFNlbnQgbmV3IHBhcmFtcywgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVGlja2V0LTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyROZXdRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskTmV3U3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWydBZ2VudFRpY2tldENvbXBvc2UnXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAoKICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHt9CiAgICB9LAoKICAgICMgZHluYW1pYyBmaWVsZHMgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItRHluYW1pY0ZpZWxkLTEgLSBTZW50IG5ldyBkeW5hbWljIGZpZWxkIHZhbHVlLCcKICAgICAgICAgICAgLiAnIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lID0+IFsnSXRlbTInXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lID0+IFsnSXRlbTInXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRHluYW1pY0ZpZWxkLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSA9PiBbJ0l0ZW0xJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHVzZXIgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWycyIGxvdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsnMiBsb3cnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gQ29ycmVjdCBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCik7CgpteSAkRXhlY3V0ZVRlc3RzID0gc3ViIHsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgbXkgQFRlc3RzID0gQHsgJFBhcmFte1Rlc3RzfSB9OwoKICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICMgY2xlYW4gcHJldmlvdXMgZGF0YQogICAgICAgICRUaWNrZXRPYmplY3QtPntUaWNrZXRBY2xEYXRhfSA9IHt9OwoKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRBY2wnLAogICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e0FDTHN9LAogICAgICAgICk7CgogICAgICAgICRHb3RBQ0xzID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBY2wnKTsKCiAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRHb3RBQ0xzLAogICAgICAgICAgICAkVGVzdC0+e0FDTHN9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0xzIFNldCBhbmQgR2V0IGZyb20gc3lzY29uZmlnIiwKICAgICAgICApOwoKICAgICAgICBteSAkQ29uZmlnICAgICA9ICRUZXN0LT57Q29uZmlnfTsKICAgICAgICBteSAkQUNMU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCggJXsgJFRlc3QtPntDb25maWd9IH0gKTsKCiAgICAgICAgIyBnZXQgdGhlIGRhdGEgZnJvbSBBQ0wKICAgICAgICBteSAlQUNMRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKCiAgICAgICAgaWYgKCAhJFRlc3QtPntTdWNjZXNzTWF0Y2h9ICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkQUNMU3VjY2VzcywKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEV4ZWN1dGVkIHdpdGggRmFsc2UiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgXCVBQ0xEYXRhLAogICAgICAgICAgICAgICAge30sCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgZGF0YSBtdXN0IGJlIGVtcHR5IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1JldHVyblR5cGV9IGVxICdBY3Rpb24nICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBhY3Rpb24gZGF0YSBmcm9tIEFDTAogICAgICAgICAgICAgICAgIyBBY3Rpb24gQUNMIGFsd2F5cyByZXR1cm4gZmFsc2UKICAgICAgICAgICAgICAgIG15ICVBQ0xBY3Rpb25EYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwoKICAgICAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICAgICBcJUFDTEFjdGlvbkRhdGEsCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXR1cm5BY3Rpb25EYXRhfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgYWN0aW9uIGRhdGEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRBQ0xTdWNjZXNzLAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEV4ZWN1dGVkIHdpdGggVHJ1ZSIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICAgICBcJUFDTERhdGEsCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXR1cm5EYXRhfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgZGF0YSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNsZWFuIEFDTHMKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRBY2wnLAogICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICApOwoKICAgICAgICAkR290QUNMcyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QWNsJyk7CgogICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkR290QUNMcywKICAgICAgICAgICAge30sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTHMgYXJlIGNsZWFuIiwKICAgICAgICApOwoKICAgIH0KfTsKJEV4ZWN1dGVUZXN0cy0+KCBUZXN0cyA9PiBcQFRlc3RzICk7CgojIHNwZWNpYWwgdGVzdHMKQFRlc3RzID0gKAoKICAgICMgUHJvcGVydGllcyBOb3QKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90XTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdF1SYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdF0gTmVnYXRlZCBRdWV1ZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdF1SYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90XSBpbiBhbiBBcnJheTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsgJ1tOb3RdUmF3JywgJ1tOb3RdUG9zdG1hc3RlcicgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9wZXJ0aWVzIE5vdFJlZ0V4cAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RSZWdFeHBdOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90UmVnRXhwXUhXJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RSZWdFeHBdIE5lZ2F0ZWQgUXVldWU6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RSZWdFeHBdYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90UmVnRXhwXSBpbiBhbiBBcnJheTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsgJ1tOb3RSZWdFeHBdYXcnLCAnW05vdFJlZ0V4cF1tYXN0ZXInIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvcGVydGllcyBOb3RyZWdleHAKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90cmVnZXhwXTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdHJlZ2V4cF1IVyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90cmVnZXhwXSBOZWdhdGVkIFF1ZXVlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90cmVnZXhwXXJhJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdHJlZ2V4cF0gaW4gYW4gQXJyYXk6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbICdbTm90cmVnZXhwXXJhJywgJ1tOb3RyZWdleHBdbWFzdGVyJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIGNvbWJpbmF0aW9uIHBvc3NpYmxlLCBwb3NzaWJsZSBub3QKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZS9Qb3NzaWJsZU5vdDonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHknID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkyJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGUvUG9zc2libGVOb3QgSm9pbjonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHknID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZU5vdCBvbmx5OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBQb3NzaWJsZS9Qb3NzaWJsZUFkZDogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnREItVXNlci0xLUUnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnNCBoaWdoJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBQb3NzaWJsZS9Qb3NzaWJsZUFkZC9Qb3NzaWJsZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnREItVXNlci0xLUUnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnNCBoaWdoJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0RCLVVzZXItMS1GJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzQgaGlnaCcsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCgogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGVOb3QvUG9zc2libGVBZGQ6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVBZGQgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlTm90L1Bvc3NpYmxlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZS9Qb3NzaWJsZUFkZC9Qb3NzaWJsZU5vdDonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkxJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCAnMyBtZWRpdW0nLCAnNCBoaWdoJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkzJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgfSwKICAgIH0sCik7CiRTZWxmLT5UcnVlKAogICAgMSwKICAgICItLS0gU3RhcnQgU3BlY2lhbCBBQ0wgVGVzdHMgLS0tIiwKKTsKJEV4ZWN1dGVUZXN0cy0+KCBUZXN0cyA9PiBcQFRlc3RzICk7CgojIC0tLQojIGNsZWFuIHRoZSBzeXN0ZW0KIyAtLS0KIyBjbGVhbiBxdWV1ZXMKbXkgJFF1ZXVlVXBkYXRlU3VjY2VzcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVVcGRhdGUoCiAgICAlUXVldWVEYXRhLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eydpbnZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRRdWV1ZVVwZGF0ZVN1Y2Nlc3MsCiAgICAiUXVldWVVcGRhdGUoKSBJRCAoJFF1ZXVlSUQpIGludmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdRdWV1ZVVwZGF0ZVN1Y2Nlc3MgPSAkUXVldWVPYmplY3QtPlF1ZXVlVXBkYXRlKAogICAgJU5ld1F1ZXVlRGF0YSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsnaW52YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3UXVldWVVcGRhdGVTdWNjZXNzLAogICAgIlF1ZXVlVXBkYXRlKCkgSUQgKCROZXdRdWV1ZUlEKSBpbnZhbGlkYXRlZCBzdWNjZXNzZnVsbHkiCik7CgojIGNsZWFuIHNlcnZpY2VzCm15ICRTZXJ2aWNlVXBkYXRlU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgJVNlcnZpY2VEYXRhLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eydpbnZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlVXBkYXRlU3VjY2VzcywKICAgICJTZXJ2aWNlVXBkYXRlKCkgSUQgKCRTZXJ2aWNlSUQpIGludmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdTZXJ2aWNlVXBkYXRlU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgJU5ld1NlcnZpY2VEYXRhLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eydpbnZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdTZXJ2aWNlVXBkYXRlU3VjY2VzcywKICAgICJTZXJ2aWNlVXBkYXRlKCkgSUQgKCROZXdTZXJ2aWNlSUQpIGludmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgY2xlYW4gdHlwZXMKbXkgJFR5cGVVcGRhdGVTdWNjZXNzID0gJFR5cGVPYmplY3QtPlR5cGVVcGRhdGUoCiAgICAlVHlwZURhdGEsCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J2ludmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFR5cGVVcGRhdGVTdWNjZXNzLAogICAgIlR5cGVVcGRhdGUoKSBJRCAoJFR5cGVJRCkgaW52YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5IgopOwpteSAkTmV3VHlwZVVwZGF0ZVN1Y2Nlc3MgPSAkVHlwZU9iamVjdC0+VHlwZVVwZGF0ZSgKICAgICVOZXdUeXBlRGF0YSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsnaW52YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3VHlwZVVwZGF0ZVN1Y2Nlc3MsCiAgICAiVHlwZVVwZGF0ZSgpIElEICgkTmV3VHlwZUlEKSBpbnZhbGlkYXRlZCBzdWNjZXNzZnVsbHkiCik7CgojIGNsZWFuIHByaW9yaXRpZXMKbXkgJFByaW9yaXR5VXBkYXRlU3VjY2VzcyA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlVcGRhdGUoCiAgICAlUHJpb3JpdHlEYXRhLAogICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdHlEYXRhe0lEfSwKICAgIFZhbGlkSUQgICAgPT4gJFZhbGlkTGlzdHsnaW52YWxpZCd9LAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkUHJpb3JpdHlVcGRhdGVTdWNjZXNzLAogICAgIlByaW9yaXR5VXBkYXRlKCkgSUQgKCRQcmlvcml0eUlEKSBpbnZhbGlkYXRlZCBzdWNjZXNzZnVsbHkiCik7Cm15ICROZXdQcmlvcml0eVVwZGF0ZVN1Y2Nlc3MgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5VXBkYXRlKAogICAgJU5ld1ByaW9yaXR5RGF0YSwKICAgIFByaW9yaXR5SUQgPT4gJE5ld1ByaW9yaXR5RGF0YXtJRH0sCiAgICBWYWxpZElEICAgID0+ICRWYWxpZExpc3R7J2ludmFsaWQnfSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1ByaW9yaXR5VXBkYXRlU3VjY2VzcywKICAgICJQcmlvcml0eVVwZGF0ZSgpIElEICgkTmV3UHJpb3JpdHlJRCkgaW52YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBjbGVhbiBTTEFzCm15ICRTTEFVcGRhdGVTdWNjZXNzID0gJFNMQU9iamVjdC0+U0xBVXBkYXRlKAogICAgJVNMQURhdGEsCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J2ludmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNMQVVwZGF0ZVN1Y2Nlc3MsCiAgICAiU0xBVXBkYXRlKCkgSUQgKCRTTEFJRCkgaW52YWxpZGF0ZWQgc3VjY2Vzc2Z1bGx5IgopOwpteSAkTmV3U0xBVXBkYXRlU3VjY2VzcyA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICVOZXdTTEFEYXRhLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eydpbnZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdTTEFVcGRhdGVTdWNjZXNzLAogICAgIlNMQVVwZGF0ZSgpIElEICgkTmV3U0xBSUQpIGludmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgY2xlYW4gc3RhdGVzCm15ICRTdGF0ZVVwZGF0ZVN1Y2Nlc3MgPSAkU3RhdGVPYmplY3QtPlN0YXRlVXBkYXRlKAogICAgJVN0YXRlRGF0YSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsnaW52YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVVcGRhdGVTdWNjZXNzLAogICAgIlN0YXRlVXBkYXRlKCkgSUQgKCRTdGF0ZUlEKSBpbnZhbGlkYXRlZCBzdWNjZXNzZnVsbHkiCik7Cm15ICROZXdTdGF0ZVVwZGF0ZVN1Y2Nlc3MgPSAkU3RhdGVPYmplY3QtPlN0YXRlVXBkYXRlKAogICAgJU5ld1N0YXRlRGF0YSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsnaW52YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3U3RhdGVVcGRhdGVTdWNjZXNzLAogICAgIlN0YXRlVXBkYXRlKCkgSUQgKCROZXdTdGF0ZUlEKSBpbnZhbGlkYXRlZCBzdWNjZXNzZnVsbHkiCik7CgojIGNsZWFuIGR5bmFtaWMgZmllbGRzCm15ICREeW5hbWljRmllbGRWYWx1ZURlbGV0ZVN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QtPkFsbFZhbHVlc0RlbGV0ZSgKICAgIEZpZWxkSUQgPT4gJER5bmFtaWNGaWVsZElELAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkRHluYW1pY0ZpZWxkVmFsdWVEZWxldGVTdWNjZXNzLAogICAgIkR5bmFtaWNGaWVsZFZhbHVlIEFsbFZhbHVlc0RlbGV0ZSgpIGZvciBEeW5hbWljRmllbGQgKCREeW5hbWljRmllbGRJRCkgZGVsZXRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkRHluYW1pY0ZpZWxkRGVsZXRlU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgIElEICAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgUmVvcmRlciA9PiAwLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkRHluYW1pY0ZpZWxkRGVsZXRlU3VjY2VzcywKICAgICJEeW5hbWljRmllbGREZWxldGUoKSBmb3IgRHluYW1pY0ZpZWxkICgkRHluYW1pY0ZpZWxkSUQpIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBjbGVhbiB0aWNrZXRzCm15ICRUaWNrZXREZWxldGVTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldERlbGV0ZVN1Y2Nlc3MsCiAgICAiVGlja2V0RGVsZXRlIElEICgkVGlja2V0SUQpIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5IgopOwoKMTsK
IyAtLQojIEN1c3RvbWVyVXNlclNlcnZpY2UudCAtIEN1c3RvbWVyVXNlclNlcnZpY2UgdGVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMWIyNjFhZDA2ZjhkZTQxOTA1MTBmMjhiOGEyNjBiZDYyNjY3MDVjYy9zY3JpcHRzL3Rlc3QvQ3VzdG9tZXJVc2VyU2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJEhlbHBlck9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBkb24ndCBjaGVjayBlbWFpbCBhZGRyZXNzIHZhbGlkaXR5CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIHNhdmUgYWxsIG9yaWdpbmFsIGRlZmF1bHQgc2VydmljZXMKbXkgQE9yaWdpbmFsRGVmYXVsdFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAogICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKKTsKCiMgZGVsZXRlIGFsbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBhZGQgc2VydmljZTEKbXkgJFNlcnZpY2VSYW5kMSA9ICdTb21lU2VydmljZScgLiBpbnQoIHJhbmQoMTAwMDAwMCkgKTsKbXkgJFNlcnZpY2VJRDEgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAkU2VydmljZVJhbmQxLAogICAgQ29tbWVudCA9PiAnU29tZSBDb21tZW50JywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRDEsCiAgICAnU2VydmljZUFkZDEoKScsCik7CgojIGFkZCBzZXJ2aWNlMgpteSAkU2VydmljZVJhbmQyID0gJ1NvbWVTZXJ2aWNlJyAuIGludCggcmFuZCgxMDAwMDAwKSApOwpteSAkU2VydmljZUlEMiAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlUmFuZDIsCiAgICBDb21tZW50ID0+ICdTb21lIENvbW1lbnQnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQopOwoKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMiwKICAgICdTZXJ2aWNlQWRkMigpJywKKTsKCm15ICRDdXN0b21lclVzZXIxID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7Cm15ICRDdXN0b21lclVzZXIyID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgojIGFsbG9jYXRpb24gdGVzdCAxCm15IEBBbGxvY2F0aW9uMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDIKbXkgQEFsbG9jYXRpb24yID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMiwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDIoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAzCm15IEBBbGxvY2F0aW9uMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24zLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDQKbXkgQEFsbG9jYXRpb240ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uNCwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDQoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDEKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA1Cm15IEBBbGxvY2F0aW9uNSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb241LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDYKbXkgQEFsbG9jYXRpb242ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb242Q291bnQgPSBAQWxsb2NhdGlvbjY7Cm15ICRBbGxvY2F0aW9uNk9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjZDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uNlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uNk9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjZPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDYoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCA3Cm15IEBBbGxvY2F0aW9uNyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb243LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDgKbXkgQEFsbG9jYXRpb244ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb244Q291bnQgPSBAQWxsb2NhdGlvbjg7Cm15ICRBbGxvY2F0aW9uOE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjhDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uOFswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uOE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjhPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDgoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDIKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQyLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA5Cm15IEBBbGxvY2F0aW9uOSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjlDb3VudCA9IEBBbGxvY2F0aW9uOTsKbXkgJEFsbG9jYXRpb245T2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uOUNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb245WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb245T2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uOU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0OSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDEwCm15IEBBbGxvY2F0aW9uMTAgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCik7CgpteSAkQWxsb2NhdGlvbjEwQ291bnQgPSBAQWxsb2NhdGlvbjEwOwpteSAkQWxsb2NhdGlvbjEwT2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uMTBDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uMTBbMF0gZXEgJFNlcnZpY2VJRDIgKSB7CiAgICAkQWxsb2NhdGlvbjEwT2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uMTBPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDEwKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTEKbXkgQEFsbG9jYXRpb24xMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xMSwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDExKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTIKbXkgQEFsbG9jYXRpb24xMiA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKKTsKCm15ICRBbGxvY2F0aW9uMTJDb3VudCA9IEBBbGxvY2F0aW9uMTI7Cm15ICRBbGxvY2F0aW9uMTJPayAgICA9IDA7CmlmICggJEFsbG9jYXRpb24xMkNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb24xMlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uMTJPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xMk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTIoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDMKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMiwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTMKbXkgQEFsbG9jYXRpb24xMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjEzT2sgPSAwOwppZiAoIHNjYWxhciBAQWxsb2NhdGlvbjEzIGVxIDEgJiYgJEFsbG9jYXRpb24xM1swXSBlcSAkU2VydmljZUlEMiApIHsKICAgICRBbGxvY2F0aW9uMTNPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xM09rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTMoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNApteSBAQWxsb2NhdGlvbjE0ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNENvdW50ID0gQEFsbG9jYXRpb24xNDsKbXkgJEFsbG9jYXRpb24xNE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjE0Q291bnQgZXEgMSAmJiAkQWxsb2NhdGlvbjE0WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb24xNE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjE0T2ssCiAgICAnQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QxNCgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDE1Cm15IEBBbGxvY2F0aW9uMTUgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKbXkgJEFsbG9jYXRpb24xNUNvdW50ID0gQEFsbG9jYXRpb24xNTsKbXkgJEFsbG9jYXRpb24xNU9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNUNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNVswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE1WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTVbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNVsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTVPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTUoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNgpteSBAQWxsb2NhdGlvbjE2ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNkNvdW50ID0gQEFsbG9jYXRpb24xNjsKbXkgJEFsbG9jYXRpb24xNk9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNkNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNlswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE2WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTZbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNlsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTZPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTYoKScsCik7CgojIHJlbmFtZSBjdXN0b21lciB1c2VyMQpteSAlQ3VzdG9tZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyMSwKKTsKbXkgJE5ld0N1c3RvbWVyVXNlcjEgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwpteSAkVXBkYXRlICAgICAgICAgICA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlclVwZGF0ZSgKICAgICVDdXN0b21lciwKICAgIElEICAgICAgICA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFVzZXJMb2dpbiA9PiAkTmV3Q3VzdG9tZXJVc2VyMSwKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAiQ3VzdG9tZXJVc2VyVXBkYXRlIC0gJEN1c3RvbWVye1VzZXJMb2dpbn0gLSAkTmV3Q3VzdG9tZXJVc2VyMSIsCik7CgojIGFsbG9jYXRpb24gdGVzdCBhZnRlciByZW5hbWUKIyBpbnN0YW50aWF0ZSBuZXcgc2VydmljZSBvYmplY3QgYmVjYXVzZSBvZiBjYWNoaW5nIQokS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoIE9iamVjdHMgPT4gWydLZXJuZWw6OlN5c3RlbTo6U2VydmljZSddICk7CiRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCm15IEBBbGxvY2F0aW9uMTcgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMTcsCiAgICAwLAogICAgIk5vIHNlcnZpY2VzIGFsbG9jYXRlZCB0byBvbGQgY3VzdG9tZXIgJEN1c3RvbWVyVXNlcjEgYWZ0ZXIgcmVuYW1lIiwKKTsKbXkgQEFsbG9jYXRpb24xOCA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICROZXdDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xOCwKICAgIDEsCiAgICAiU2VydmljZXMgYWxsb2NhdGVkIHRvIG5ldyBjdXN0b21lciAkTmV3Q3VzdG9tZXJVc2VyMSBhZnRlciByZW5hbWUiLAopOwoKIyByZW5hbWUgY3VzdG9tZXIgdXNlciBhZ2FpbiBzbyByZWNvcmQgY2FuIGJlIGRlbGV0ZWQgd2hlbiB0ZXN0IGZpbmlzaGVzCiRVcGRhdGUgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJVcGRhdGUoCiAgICAlQ3VzdG9tZXIsCiAgICBJRCAgICAgICAgPT4gJE5ld0N1c3RvbWVyVXNlcjEsCiAgICBVc2VyTG9naW4gPT4gJEN1c3RvbWVye1VzZXJMb2dpbn0sCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgZGVsZXRlIGFsbCB0ZXN0IGFsbG9jYXRpb25zIHRvIGNsZWFuIHN5c3RlbQokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRDEsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAwLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQyLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMSwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDAsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRDIsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAwLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMiwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDAsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyByZXN0b3JlIGFsbCBvcmlnaW5hbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBzZXQgc2VydmljZTEgaW52YWxpZApteSAkU2VydmljZVVwZGF0ZTEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEMSwKICAgIE5hbWUgICAgICA9PiAkU2VydmljZVJhbmQxLAogICAgVmFsaWRJRCAgID0+IDIsCiAgICBVc2VySUQgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VVcGRhdGUxLAogICAgJ1NlcnZpY2VVcGRhdGUxKCknLAopOwoKIyBzZXQgc2VydmljZTIgaW52YWxpZApteSAkU2VydmljZVVwZGF0ZTIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEMiwKICAgIE5hbWUgICAgICA9PiAkU2VydmljZVJhbmQyLAogICAgVmFsaWRJRCAgID0+IDIsCiAgICBVc2VySUQgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VVcGRhdGUyLAogICAgJ1NlcnZpY2VVcGRhdGUyKCknLAopOwoKMTsK
IyAtLQojIElUU01DSVBBbGxvY2F0ZS50IC0gY3JpdGljYWxpdHksIGltcGFjdCBwcmlvcml0eSB0ZXN0cwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHZhcnMgcXcoJFNlbGYpOwoKbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QgKFVzZXJJRCBpcyBuZWVkZWQpCm15ICRBbGxvY2F0ZURhdGExID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRBbGxvY2F0ZURhdGExLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdApteSAkQWxsb2NhdGVEYXRhMiA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoICRBbGxvY2F0ZURhdGEyLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJEhhc2hPSyA9IDE7CmlmICggcmVmICRBbGxvY2F0ZURhdGEyIG5lICdIQVNIJyApIHsKICAgICRIYXNoT0sgPSAwOwp9CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIDJkIGhhc2gKaWYgKCRIYXNoT0spIHsKCiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfSApIHsKCiAgICAgICAgaWYgKCByZWYgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICBsYXN0IElNUEFDVDsKICAgICAgICB9CgogICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5IHx8ICEkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICAgICAgbGFzdCBJTVBBQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiMgY2hlY2sgSGFzaE9LCiRTZWxmLT5UcnVlKCAkSGFzaE9LLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNhbGwgUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkgZm9yIG9uZSBDcml0aWNhbGl0eS9JbXBhY3QgcGFpcgppZiAoJEhhc2hPSykgewoKICAgIG15ICgkSW1wYWN0KSA9IHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfTsKCiAgICBpZiAoICRBbGxvY2F0ZURhdGEyLT57JEltcGFjdH0gKSB7CiAgICAgICAgbXkgKCRDcml0aWNhbGl0eSkgPSBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9OwoKICAgICAgICBteSAkRXhwZWN0ZWRQcmlvcml0eUlEID0gJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CiAgICAgICAgbXkgJFByaW9yaXR5SUQgICAgICAgICA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRJbXBhY3QsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRQcmlvcml0eUlELAogICAgICAgICAgICAkRXhwZWN0ZWRQcmlvcml0eUlELAogICAgICAgICAgICAnUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCknLAogICAgICAgICk7CiAgICB9Cn0KCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MxID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MxLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MyID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRTdWNjZXNzMiwgJ0FsbG9jYXRlVXBkYXRlKCknICk7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoIChhbGxvY2F0aW9uIGhhc2gpCm15ICRTdWNjZXNzMyA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICBBbGxvY2F0ZURhdGEgPT4gewogICAgICAgIFRlc3QgID0+ICdhYWEnLAogICAgICAgIFRlc3QyID0+ICdiYmInLAogICAgfSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MzLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJFN1Y2Nlc3M0ID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5UcnVlKCAkU3VjY2VzczQsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKMTsK
IyAtLQojIFNlcnZpY2UudCAtIFNlcnZpY2UgdGVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMWIyNjFhZDA2ZjhkZTQxOTA1MTBmMjhiOGEyNjBiZDYyNjY3MDVjYy9zY3JpcHRzL3Rlc3QvU2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRIZWxwZXJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCB1c2VycwpteSBAVXNlcklEczsKewoKICAgICMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCiAgICBteSAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1NlcnZpY2UnIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtU2VydmljZS0nIC4gJENvdW50ZXIgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LVNlcnZpY2UtJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwogICAgfQoKICAgICMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gc2VydmljZSBuYW1lcwpteSBAU2VydmljZU5hbWU7CmZvciBteSAkQ291bnRlciAoIDEgLi4gMTEgKSB7CiAgICBwdXNoIEBTZXJ2aWNlTmFtZSwgJ1VuaXRUZXN0JyAuIGludCByYW5kIDFfMDAwXzAwMDsKfQoKIyBnZXQgb3JpZ2luYWwgc2VydmljZSBsaXN0IGZvciBsYXRlciBjaGVja3MKbXkgJVNlcnZpY2VMaXN0T3JpZ2luYWwgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJdGVtRGF0YSA9IFsKCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAojIC0tLQojIElUU00KIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAojIC0tLQojIElUU00KIyAtLS0KCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMicsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiA0LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUzJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICc6OlVQREFURTQnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJzo6VGVzdDo6VVBEQVRFNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMl0gLiAnOjpUZXN0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICc6OlRlc3QnIC4gJFNlcnZpY2VOYW1lWzJdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzJdIC4gJzo6VGVzdDo6VGVzdCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMl0gLiAnVGVzdDo6JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyICIgLiAkU2VydmljZU5hbWVbM10gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzNdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzNdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNlcnZpY2VOYW1lWzNdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVszXSAuICcgVVBEQVRFMScsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbM10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54nLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqknLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKHVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gVVBEQVRFMScsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTZXJ2aWNlTmFtZVs4XSAuICcgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTZXJ2aWNlTmFtZVs4XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVs1XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs1XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAocGFyZW50IHNlcnZpY2UgY2hlY2spCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzZdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzZdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5IChwYXJlbnQgc2VydmljZSBjaGVjaykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gIiBcbiBcdCAiIC4gJFNlcnZpY2VOYW1lWzddIC4gIiBcbiBcdCAiLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVs1XSAuICc6OicgLiAkU2VydmljZU5hbWVbNl0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzddLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHBhcmVudCBzZXJ2aWNlIGlkIGFuZCBwYXJlbnQgaWQgYXJlIGlkZW50aWNhbCkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFNlcnZpY2VOYW1lWzddIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgdXBkYXRlZCBzdWNlc3NmdWxseSAobW92ZSBzZXJ2aWNlIHRvIHRoZSBoaWdoZXJzdCBsZXZlbCkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5IChtb3ZlIHNlcnZpY2UgYmFjayB3aXRoIHRoZSBvbGQgcGFyZW50IHNlcnZpY2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURSgyKScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonCiAgICAgICAgICAgICAgICAuICRTZXJ2aWNlTmFtZVs2XSAuICc6OicKICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VOYW1lWzddCiAgICAgICAgICAgICAgICAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCl07CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgcnVuIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFRlc3RDb3VudCA9IDE7Cm15ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7Cm15ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwpteSAkQWRkZWRDb3VudGVyID0gMDsKCmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgIGlmICggJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9OwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbmV3IHNlcnZpY2UKICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICV7ICRJdGVtLT57QWRkfSB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgc2VydmljZSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewoKICAgICAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gPSAkTGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gPSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUFkZCgpIC0gU2VydmljZUlEOiAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU2VydmljZUlEKSB7CgogICAgICAgICAgICAgICAgIyBsb29rdXAgc2VydmljZSBuYW1lCiAgICAgICAgICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggU2VydmljZUlEID0+ICRTZXJ2aWNlSUQgKTsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VOYW1lIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNlcnZpY2UgaWQKICAgICAgICAgICAgICAgIG15ICRTZXJ2aWNlSUROZXcgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggTmFtZSA9PiAkU2VydmljZU5hbWUgfHwgJycgKTsKCiAgICAgICAgICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VydmljZUlETmV3IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQgICAgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxvb2t1cCgpIC0gcmV2ZXJzZSBsb29rdXAiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBsYXN0IHNlcnZpY2UgaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0TGFzdEFkZGVkU2VydmljZUlEID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRTZXJ2aWNlSUQgICAgID0gJFNlcnZpY2VJRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUFkZCgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBzZXJ2aWNlCiAgICAgICAgbXkgJVNlcnZpY2VHZXQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkSXRlbS0+e0FkZH0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgc2VydmljZSBkYXRhIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBzZXJ2aWNlCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57QWRkR2V0fSB9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkU2VydmljZUdldHskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPnskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSAkU2VydmljZUF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEl0ZW0tPntVcGRhdGV9ICkgewoKICAgICAgICAjIGNoZWNrIGxhc3Qgc2VydmljZSBpZCB2YXJpYWJsZQogICAgICAgIGlmICggISRMYXN0QWRkZWRTZXJ2aWNlSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIFNFUlZJQ0UgSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ICYmICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9OwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIHNlcnZpY2UKICAgICAgICBteSAkVXBkYXRlU3VjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJExhc3RBZGRlZFNlcnZpY2VJRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2Ugd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlVXBkYXRlKCkgLSBTZXJ2aWNlSUQ6ICRMYXN0QWRkZWRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VVcGRhdGUoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBub24tZXhpc3Rpbmcgc2VydmljZQogICAgICAgIG15ICROb25leGlzdGluZ1NlcnZpY2VJRCA9IDMyNTY3IC0gMTsKICAgICAgICBteSAkVXBkYXRlTm9uU3VjZXNzICAgICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJXsgJEl0ZW0tPntVcGRhdGV9IH0sCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkTm9uZXhpc3RpbmdTZXJ2aWNlSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRVcGRhdGVOb25TdWNlc3MsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VVcGRhdGUoKSBmb3Igbm9uZXhpc3Rpbmcgc2VydmljZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0KICAgICAgICAgICAgJiYgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gPSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgICBteSAlU2VydmljZUdldDIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRMYXN0QWRkZWRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkSXRlbS0+e1VwZGF0ZX0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgc2VydmljZSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkU2VydmljZUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e1VwZGF0ZUdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlcnZpY2VHZXQyeyRTZXJ2aWNlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+eyRTZXJ2aWNlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtICRTZXJ2aWNlQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbG9va3VwIHNlcnZpY2UgbmFtZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VHZXQye1NlcnZpY2VJRH0gKTsKCiAgICAgICAgIyBsb29rdXAgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlcnZpY2VOYW1lIHx8ICcnLAogICAgICAgICAgICAkU2VydmljZUdldDJ7TmFtZX0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0aGUgc2VydmljZSBpZAogICAgICAgIG15ICRTZXJ2aWNlSUROZXcgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggTmFtZSA9PiAkU2VydmljZU5hbWUgfHwgJycgKTsKCiAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VydmljZUlETmV3IHx8ICcnLAogICAgICAgICAgICAkU2VydmljZUdldDJ7U2VydmljZUlEfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxvb2t1cCgpIC0gcmV2ZXJzZSBsb29rdXAiLAogICAgICAgICk7CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQWRkaXRpb25hbCBTZXJ2aWNlR2V0IHRlc3QgKEJ5IFNlcnZpY2VuYW1lIGFuZCBTZXJ2aWNlSUQpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICAjIGdldCBhIHNlcnZpY2UgYnkgdXNpbmcgdGhlIHNlcnZpY2UgbmFtZQogICAgbXkgJVNlcnZpY2VHZXQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlcnZpY2VHZXR7TmFtZX0sCiAgICAgICAgJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtIGJ5IHNlcnZpY2UgbmFtZSIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBzYW1lIHNlcnZpY2UgYnkgdXNpbmcgdGhlIHNlcnZpY2UgaWQKICAgICVTZXJ2aWNlR2V0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR2V0e1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VydmljZUdldHtOYW1lfSwKICAgICAgICAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUdldCgpIC0gYnkgc2VydmljZSBpZCIsCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VMaXN0IHRlc3QgMSAoY2hlY2sgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAlU2VydmljZUxpc3QxID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKbXkgJVNlcnZpY2VMaXN0MU9yZyA9ICVTZXJ2aWNlTGlzdE9yaWdpbmFsOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3QxT3JnICkgewoKICAgIGlmICggJFNlcnZpY2VMaXN0MXskU2VydmljZUlEfSAmJiAkU2VydmljZUxpc3QxT3JneyRTZXJ2aWNlSUR9IGVxICRTZXJ2aWNlTGlzdDF7JFNlcnZpY2VJRH0gKSB7CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdDF7JFNlcnZpY2VJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VydmljZUxpc3Qxe0R1bW15fSA9IDE7CiAgICB9Cn0KCm15ICRTZXJ2aWNlTGlzdDFDb3VudCA9IHNjYWxhciBrZXlzICVTZXJ2aWNlTGlzdDE7CgokU2VsZi0+SXMoCiAgICAkU2VydmljZUxpc3QxQ291bnQgfHwgJycsCiAgICAkQWRkZWRDb3VudGVyICAgICAgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlTGlzdCB0ZXN0IDIgKGNoZWNrIGNhY2hlKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAlU2VydmljZUxpc3QyID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCm15ICRTZXJ2aWNlTGlzdDJTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzldLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQopOwoKbXkgJVNlcnZpY2VMaXN0MmIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3QyICkgewoKICAgIGlmICggJFNlcnZpY2VMaXN0MmJ7JFNlcnZpY2VJRH0gJiYgJFNlcnZpY2VMaXN0MnskU2VydmljZUlEfSBlcSAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfSApIHsKICAgICAgICBkZWxldGUgJFNlcnZpY2VMaXN0MmJ7JFNlcnZpY2VJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VydmljZUxpc3QyYntEdW1teX0gPSAxOwogICAgfQp9CgpteSBAU2VydmljZUxpc3QySURzICAgPSBrZXlzICVTZXJ2aWNlTGlzdDJiOwpteSAkU2VydmljZUxpc3QyQ291bnQgPSBzY2FsYXIgQFNlcnZpY2VMaXN0MklEczsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDJDb3VudCB8fCAnJywKICAgIDEsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIC0gY2hlY2sgbnVtYmVyIG9mIHNlcnZpY2VzIiwKKTsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDJJRHNbMF0gfHwgJycsCiAgICAkU2VydmljZUxpc3QyU2VydmljZUlEIHx8ICcnLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxpc3QoKSAtIGNoZWNrIGlkIG9mIGxhc3Qgc2VydmljZSIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZVNlYXJjaCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQFNlcnZpY2VTZWFyY2gxU2VhcmNoID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goIFVzZXJJRCA9PiAxICk7CgpteSAlU2VydmljZVNlYXJjaDFMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBLZWVwQ2hpbGRyZW4gPT4gMSwKKTsKClNFUlZJQ0VJRDoKZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlU2VhcmNoMVNlYXJjaCkgewoKICAgIGlmICggJFNlcnZpY2VTZWFyY2gxTGlzdHskU2VydmljZUlEfSApIHsKICAgICAgICBkZWxldGUgJFNlcnZpY2VTZWFyY2gxTGlzdHskU2VydmljZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZXJ2aWNlU2VhcmNoMUxpc3R7RHVtbXl9ID0gMTsKICAgIH0KfQoKbXkgJFNlcnZpY2VTZWFyY2gxQ291bnQgPSBzY2FsYXIga2V5cyAlU2VydmljZVNlYXJjaDFMaXN0OwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VTZWFyY2gxQ291bnQsCiAgICAwLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVNlYXJjaCgpIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucyBmb3IgbGF0ZXIgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBhZGQgc29tZSBuZWVkZWQgc2VydmljZXMgZm9yIGxhdGVyIHRlc3RzCm15IEBTZXJ2aWNlTmFtZXMgPSAoICRTZXJ2aWNlTmFtZVsxMF0gLiAnTm9ybWFsJywgJFNlcnZpY2VOYW1lWzEwXSAuICfUiCDTtCDPqiDPvicgKTsKbXkgJVNlcnZpY2VTZWFyY2gyU2VydmljZUlEOwoKbXkgJENvdW50ZXIxID0gMDsKZm9yIG15ICRTZXJ2aWNlTmFtZSAoQFNlcnZpY2VOYW1lcykgewoKICAgICRTZXJ2aWNlU2VhcmNoMlNlcnZpY2VJRHskQ291bnRlcjF9ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCiAgICAkQ291bnRlcjErKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VTZWFyY2ggdGVzdCAyIChnZW5lcmFsIG5hbWUgY2hlY2tzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ291bnRlcjIgPSAwOwpmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZU5hbWVzKSB7CgogICAgbXkgQFByZXBhcmVkTmFtZXMgPSAoCiAgICAgICAgJFNlcnZpY2VOYW1lLAogICAgICAgICcqJyAuICRTZXJ2aWNlTmFtZSwKICAgICAgICAkU2VydmljZU5hbWUgLiAnKicsCiAgICAgICAgJyonIC4gJFNlcnZpY2VOYW1lIC4gJyonLAogICAgICAgICcqKicgLiAkU2VydmljZU5hbWUsCiAgICAgICAgJFNlcnZpY2VOYW1lIC4gJyoqJywKICAgICAgICAnKionIC4gJFNlcnZpY2VOYW1lIC4gJyoqJywKICAgICk7CgogICAgZm9yIG15ICRQcmVwYXJlZE5hbWUgKEBQcmVwYXJlZE5hbWVzKSB7CgogICAgICAgIG15IEBTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlU2VhcmNoKAogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZXJ2aWNlTGlzdFswXSB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VTZWFyY2gyU2VydmljZUlEeyRDb3VudGVyMn0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VTZWFyY2goKSAtIGdlbmVyYWwgbmFtZSBjaGVjayIsCiAgICAgICAgKTsKCiAgICAgICAgJFRlc3RDb3VudCsrOwogICAgfQoKICAgICRDb3VudGVyMisrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZUxpc3RHZXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZXMKbXkgJFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0R2V0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgaWYgcmVzdWx0IGlzIGFuIGFycmF5IHJlZgokU2VsZi0+SXMoCiAgICByZWYgJFNlcnZpY2VMaXN0LAogICAgJ0FSUkFZJywKICAgICJTZXJ2aWNlTGlzdEdldCgpIC0gSXMgQXJyYXkiLAopOwoKIyBjaGVjayBpZiBlYWNoIGFycmF5IGl0ZW0gaXMgYSBoYXNoIHJlZgp7CiAgICBteSAkQ291bnRlcjsKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICByZWYgJFNlcnZpY2VEYXRhLAogICAgICAgICAgICAnSEFTSCcsCiAgICAgICAgICAgICJTZXJ2aWNlTGlzdEdldFskQ291bnRlcl0gLSBJcyBIYXNoIiwKICAgICAgICApOwogICAgfQp9CgojIGNoZWNrIGludGVncml0eSBvZiBlYWNoIGFycmF5IGVsZW1lbnQKewogICAgbXkgJENvdW50ZXI7CiAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiMgLS0tCiAgICAgICAgKTsKICAgICAgICAkQ291bnRlcisrOwogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLAogICAgICAgICAgICBcJVNlcnZpY2UsCiAgICAgICAgICAgICJTZXJ2aWNlTGlzdEdldFskQ291bnRlcl0gLSBDb21wYXJlZCB0byBTZXJ2aWNlR2V0IiwKICAgICAgICApOwogICAgfQp9CgojIGFkZCBzZXJ2aWNlcwpteSBAQWRkZWRQYXJlbnRTZXJ2aWNlczsKCm15ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0U2VydmljZV9HRl8nIC4gJFJhbmRvbUlELAogICAgUGFyZW50SUQgPT4gMCwKICAgIFZhbGlkSUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBDb21tZW50ICA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZUdyYW5kRmF0aGVyIgopOwoKcHVzaCBAQWRkZWRQYXJlbnRTZXJ2aWNlcywgJFNlcnZpY2VHcmFuZEZhdGhlcklEOwoKbXkgJFNlcnZpY2VGYXRoZXJJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0U2VydmljZV9GXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBWYWxpZElEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgQ29tbWVudCAgPT4gJ1Rlc3Rpbmcgc2VydmljZScsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUZhdGhlcklELAogICAgIlNlcnZpY2VBZGQoKSAtIGZvciBTZXJ2aWNlRmF0aGVyIgopOwoKcHVzaCBAQWRkZWRQYXJlbnRTZXJ2aWNlcywgJFNlcnZpY2VGYXRoZXJJRDsKCm15ICRTZXJ2aWNlU29uSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgID0+ICdVbml0VGVzdFNlcnZpY2VfU18nIC4gJFJhbmRvbUlELAogICAgUGFyZW50SUQgPT4gJFNlcnZpY2VGYXRoZXJJRCwKICAgIFZhbGlkSUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBDb21tZW50ICA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlU29uSUQsCiAgICAiU2VydmljZUFkZCgpIC0gZm9yIFNlcnZpY2VTb24iCik7CgpwdXNoIEBBZGRlZFBhcmVudFNlcnZpY2VzLCAkU2VydmljZVNvbklEOwoKIyBnZXQgdGhlIHNlcnZpY2UgbGlzdCBhZ2FpbgpteSAkTmV3U2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjb21wYXJlIHRoZSBzZXJ2aWNlIGxpc3RzIChzaG91bGQgYmUgbm90IGVxdWFsIHNpbmNlIG5ldyBzZXJ2aWNlcyB3aGVyZSBhZGRlZCkKJFNlbGYtPklzTm90RGVlcGx5KAogICAgJFNlcnZpY2VMaXN0LAogICAgJE5ld1NlcnZpY2VMaXN0LAogICAgIlNlcnZpY2VMaXN0R2V0KCkgLSBjb21wYXJlZCB3aXRoIGl0c2VsZiBhZnRlciBhZGRpbmcgbmV3IHNlcnZpY2VzIgopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VQYXJlbnRzR2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRoZSBwYXJlbnRzIGZvciBncmFuZCBmYXRoZXIKbXkgJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgW10sCiAgICAiU2VydmljZVBhcmVudHNMaXN0R2V0IC0gZm9yIFNlcnZpY2VHcmFuZEZhdGhlciIKKTsKCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFtdLAogICAgIlNlcnZpY2VQYXJlbnRzTGlzdEdldCAtIGZvciBTZXJ2aWNlR3JhbmRGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3IgZmF0aGVyCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUZhdGhlcklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbJFNlcnZpY2VHcmFuZEZhdGhlcklEXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlRmF0aGVyIgopOwoKJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFskU2VydmljZUdyYW5kRmF0aGVySURdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3Igc29uCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZVNvbklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwgJFNlcnZpY2VGYXRoZXJJRCBdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VTb24iCik7CgokU2VydmljZVBhcmVudHMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VTb25JRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgWyAkU2VydmljZUdyYW5kRmF0aGVySUQsICRTZXJ2aWNlRmF0aGVySUQgXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlU29uIChjYWNoZWQpIgopOwoKIyBzZXQgbmV3IGFkZGVkIHNlcnZpY2VzIHRvIGludmFsaWQKZm9yIG15ICRTZXJ2aWNlSUQgKEBBZGRlZFBhcmVudFNlcnZpY2VzKSB7CiAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXtTZXJ2aWNlSUR9LAogICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZXtOYW1lU2hvcnR9LAogICAgICAgIENvbW1lbnQgICA9PiAkU2VydmljZXtDb21tZW50fSwKICAgICAgICBQYXJlbnRJRCAgPT4gJFNlcnZpY2V7UGFyZW50SUR9IHx8IDAsCiAgICAgICAgVmFsaWRJRCAgID0+IDIsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNle1R5cGVJRH0sCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJFNlcnZpY2V7Q3JpdGljYWxpdHl9LAojIC0tLQogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiU2VydmljZVVwZGF0ZSgpIC0gSW52YWxpZGF0ZSBzZXJ2aWNlIGZvciBTZXJ2aWNlUGFyZW50c0xpc3RHZXQoKSBhZGRlZCBzZXJ2aWNlICIKICAgICAgICAgICAgLiAiJFNlcnZpY2V7U2VydmljZUlEfSAtICRTZXJ2aWNle05hbWV9IgogICAgKTsKfQoKMTsK
IyAtLQojIFNMQS50IC0gU0xBIHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzFiMjYxYWQwNmY4ZGU0MTkwNTEwZjI4YjhhMjYwYmQ2MjY2NzA1Y2Mvc2NyaXB0cy90ZXN0L1NMQS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRIZWxwZXJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkU0xBT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKbXkgJFVzZXJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCB1c2VycwpteSBAVXNlcklEczsKewoKICAgICMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCiAgICBteSAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1NMQScgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1TTEEtJyAuICRDb3VudGVyIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgICAgICBVc2VyRW1haWwgICAgID0+ICdVbml0VGVzdC1TTEEtJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwogICAgfQoKICAgICMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gc2VydmljZSBuYW1lcwpteSBAU0xBTmFtZTsKZm9yIG15ICRDb3VudGVyICggMSAuLiAxMCApIHsKICAgIHB1c2ggQFNMQU5hbWUsICdVbml0VGVzdCcgLiBpbnQgcmFuZCAxXzAwMF8wMDA7Cn0KCiMgY3JlYXRlIHNvbWUgdGVzdCBzZXJ2aWNlcwpteSBAU2VydmljZUlEczsKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgICMgYWRkIGEgc2VydmljZQogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgPT4gJ1VuaXRUZXN0LVNMQScgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCiAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZUlEOwp9CgojIGdldCBvcmlnaW5hbCBzbGEgbGlzdCBmb3IgbGF0ZXIgY2hlY2tzCm15ICVTTEFMaXN0T3JpZ2luYWwgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkSXRlbURhdGEgPSBbCgogICAgIyB0aGlzIHNsYSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNsYSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgIyB0aGlzIHNsYSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCgogICAgIyBzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiB7fSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBvbmUgdGVzdCBiZWZvcmUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzbGEgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNMQU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFxkbyB7J0R1bW15J30sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgdGhlIHJldHVybmVkIHNlcnZpY2UgaWQgYXJyYXkpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgdGhlIHNvcnRpbmcgb2YgdGhlIHJldHVybmVkIHNlcnZpY2UgaWQgYXJyYXkpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzFdLCAkU2VydmljZUlEc1swXSBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzJdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdLCAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzJdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzJdLCAkU2VydmljZUlEc1swXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA2MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1swXSwgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10sCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDIwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDMwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDQwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDYwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MicsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzbGEgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzbGEgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUyJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMjAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMzAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gNDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gNTAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNjAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gNzAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMicsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDIwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDMwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDQwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDcwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNsYSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMl0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUzJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnMicsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMzAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gNTAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gNjAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNzAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1syXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAzMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA0MCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiA1MCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA2MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA3MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUzJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNsYSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiIFx0IFxuIFxyICIgLiAkU0xBTmFtZVs0XSAuICIgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNF0sCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICIgXHQgXG4gXHIgIiAuICRTTEFOYW1lWzRdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzRdIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0IENvbW1lbnQgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAodW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVs1XSAuICcgz5Igz6Egxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAzLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVs1XSAuICcgz5Igz6Egxqkgz54nLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ9GgINGkIFRlc3RDb21tZW50NSDPoCDOqScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDMsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJyBbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJyBbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNsYSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNlc3NmdWxseSAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJyBbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZFNMQUlEOwpteSAkQWRkZWRDb3VudGVyID0gMDsKCmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBhZGQgbmV3IHNsYQogICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCggJXsgJEl0ZW0tPntBZGR9IH0gKTsKCiAgICAgICAgIyBjaGVjayBpZiBzbGEgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBQWRkKCkgLSBTTEFJRDogJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU0xBSUQpIHsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCBzbGEgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNMQU5hbWUgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoIFNMQUlEID0+ICRTTEFJRCApOwoKICAgICAgICAgICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU0xBTmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNsYSBpZAogICAgICAgICAgICAgICAgbXkgJFNMQUlETmV3ID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKCBOYW1lID0+ICRTTEFOYW1lIHx8ICcnICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNMQUlETmV3IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRTTEFJRCAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBzbGEgaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRTTEFJRCA9ICRTTEFJRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFBZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzbGEgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBzbGEKICAgICAgICBteSAlU0xBR2V0ID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICAgICAgQ2FjaGUgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzbGEgZGF0YSBhZnRlciBjcmVhdGlvbiBvZiB0aGUgc2xhCiAgICAgICAgZm9yIG15ICRTTEFBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntBZGRHZXR9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGF0dHJpYnV0ZXMKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFNMQUdldHskU0xBQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBR2V0KCkgLSAkU0xBQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCBzbGEgaWQgdmFyYWlibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkU0xBSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIFNFUlZJQ0UgSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIHNsYQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTTEFJRCA9PiAkTGFzdEFkZGVkU0xBSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzbGEgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFVcGRhdGUoKSAtIFNMQUlEOiAkTGFzdEFkZGVkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNsYSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICVTTEFHZXQyID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJExhc3RBZGRlZFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNsYSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkU0xBQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57VXBkYXRlR2V0fSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRTTEFHZXQyeyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57JFNMQUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFHZXQoKSAtICRTTEFBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAgc2xhIG5hbWUKICAgICAgICBteSAkU0xBTmFtZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUdldDJ7U0xBSUR9ICk7CgogICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFOYW1lIHx8ICcnLAogICAgICAgICAgICAkU0xBR2V0MntOYW1lfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNsYSBpZAogICAgICAgIG15ICRTTEFJRE5ldyA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggTmFtZSA9PiAkU0xBTmFtZSB8fCAnJyApOwoKICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFJRE5ldyB8fCAnJywKICAgICAgICAgICAgJFNMQUdldDJ7U0xBSUR9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNMQUxpc3QgdGVzdCAxIChjaGVjayBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVTTEFMaXN0MSA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwpteSAlU0xBTGlzdDFPcmcgPSAlU0xBTGlzdE9yaWdpbmFsOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNMQUlEICggc29ydCBrZXlzICVTTEFMaXN0MU9yZyApIHsKCiAgICBpZiAoICRTTEFMaXN0MXskU0xBSUR9ICYmICRTTEFMaXN0MU9yZ3skU0xBSUR9IGVxICRTTEFMaXN0MXskU0xBSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU0xBTGlzdDF7JFNMQUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEFMaXN0MXtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU0xBTGlzdDFDb3VudCA9IHNjYWxhciBrZXlzICVTTEFMaXN0MTsKCiRTZWxmLT5JcygKICAgICRTTEFMaXN0MUNvdW50IHx8ICcnLAogICAgJEFkZGVkQ291bnRlciAgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMaXN0KCkiLAopOwoKMTsK
IyAtLQojIFRpY2tldC50IC0gdGlja2V0IG1vZHVsZSB0ZXN0c2NyaXB0CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzFiMjYxYWQwNmY4ZGU0MTkwNTEwZjI4YjhhMjYwYmQ2MjY2NzA1Y2Mvc2NyaXB0cy90ZXN0L1RpY2tldC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkSGVscGVyT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRRdWV1ZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRTdGF0ZU9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkVGltZU9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7Cm15ICRUeXBlT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKbXkgJFVzZXJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKIyBzZXQgZml4ZWQgdGltZQokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVTZXQoKTsKCm15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUnLAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ2Nsb3NlZCBzdWNjZXNzZnVsJywKICAgIEN1c3RvbWVyTm8gICA9PiAnMTIzNDY1JywKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAZXhhbXBsZS5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQsCiAgICAnVGlja2V0Q3JlYXRlKCknLAopOwoKbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIEV4dGVuZGVkID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7VGl0bGV9LAogICAgJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgICdUaWNrZXRHZXQoKSAoVGl0bGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtRdWV1ZX0sCiAgICAnUmF3JywKICAgICdUaWNrZXRHZXQoKSAoUXVldWUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtQcmlvcml0eX0sCiAgICAnMyBub3JtYWwnLAogICAgJ1RpY2tldEdldCgpIChQcmlvcml0eSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1N0YXRlfSwKICAgICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICAnVGlja2V0R2V0KCkgKFN0YXRlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7T3duZXJ9LAogICAgJ3Jvb3RAbG9jYWxob3N0JywKICAgICdUaWNrZXRHZXQoKSAoT3duZXIpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtDcmVhdGVCeX0sCiAgICAxLAogICAgJ1RpY2tldEdldCgpIChDcmVhdGVCeSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e0NoYW5nZUJ5fSwKICAgIDEsCiAgICAnVGlja2V0R2V0KCkgKENoYW5nZUJ5KScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7VGl0bGV9LAogICAgJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgICdUaWNrZXRHZXQoKSAoVGl0bGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtSZXNwb25zaWJsZX0sCiAgICAncm9vdEBsb2NhbGhvc3QnLAogICAgJ1RpY2tldEdldCgpIChSZXNwb25zaWJsZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e0xvY2t9LAogICAgJ3VubG9jaycsCiAgICAnVGlja2V0R2V0KCkgKExvY2spJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtTZXJ2aWNlSUR9LAogICAgJycsCiAgICAnVGlja2V0R2V0KCkgKFNlcnZpY2VJRCknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1NMQUlEfSwKICAgICcnLAogICAgJ1RpY2tldEdldCgpIChTTEFJRCknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1R5cGVJRH0sCiAgICAnMScsCiAgICAnVGlja2V0R2V0KCkgKFR5cGVJRCknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1NvbHV0aW9uVGltZX0sCiAgICAkVGlja2V0e0NyZWF0ZWR9LAogICAgJ1RpY2tldCBjcmVhdGVkIGFzIGNsb3NlZCBhcyBTb2x1dGlvbiBUaW1lID0gQ3JlYXRpb24gVGltZScsCik7CgpteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ3VzZXJzJywgXSwKKTsKCm15ICRUZXN0VXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCik7CgpteSAkVGlja2V0SURDcmVhdGVkQnkgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+ICRUZXN0VXNlcklELAopOwoKbXkgJUNoZWNrQ3JlYXRlZEJ5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEQ3JlYXRlZEJ5LAogICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q2hhbmdlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENoYW5nZUJ5IC0gbm90IHN5c3RlbSBJRCAxIHVzZXIpJywKKTsKCiRTZWxmLT5JcygKICAgICRDaGVja0NyZWF0ZWRCeXtDcmVhdGVCeX0sCiAgICAkVGVzdFVzZXJJRCwKICAgICdUaWNrZXRHZXQoKSAoQ3JlYXRlQnkgLSBub3Qgc3lzdGVtIElEIDEgdXNlciknLAopOwoKJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElEQ3JlYXRlZEJ5LAogICAgTmV3VXNlcklEID0+ICRUZXN0VXNlcklELAogICAgVXNlcklEICAgID0+IDEsCik7CgolQ2hlY2tDcmVhdGVkQnkgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURDcmVhdGVkQnksCiAgICBVc2VySUQgICA9PiAkVGVzdFVzZXJJRCwKKTsKCiRTZWxmLT5JcygKICAgICRDaGVja0NyZWF0ZWRCeXtDcmVhdGVCeX0sCiAgICAkVGVzdFVzZXJJRCwKICAgICdUaWNrZXRHZXQoKSAoQ3JlYXRlQnkgLSBzdGlsbCB0aGUgc2FtZSBhZnRlciBPd25lclNldCknLAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e093bmVySUR9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0T3duZXJTZXQoKScsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q2hhbmdlQnl9LAogICAgMSwKICAgICdUaWNrZXRPd25lclNldCgpIChDaGFuZ2VCeSAtIFN5c3RlbSBJRCAxIG5vdyknLAopOwoKbXkgJEFydGljbGVJRCA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlVHlwZSA9PiAnbm90ZS1pbnRlcm5hbCcsCiAgICBTZW5kZXJUeXBlICA9PiAnYWdlbnQnLAogICAgRnJvbSA9PgogICAgICAgICdTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICBUbyA9PgogICAgICAgICdTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSAgU29tZSBDdXN0b21lciBBU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSA8Y3VzdG9tZXItYUBleGFtcGxlLmNvbT4nLAogICAgQ2MgPT4KICAgICAgICAnU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFJlcGx5VG8gPT4KICAgICAgICAnU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFN1YmplY3QgPT4KICAgICAgICAnc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uICcsCiAgICBCb2R5ID0+ICgKICAgICAgICAndGhlIG1lc3NhZ2UgdGV4dApQZXJsIG1vZHVsZXMgcHJvdmlkZSBhIHJhbmdlIG9mIGZlYXR1cmVzIHRvIGhlbHAgeW91IGF2b2lkIHJlaW52ZW50aW5nIHRoZSB3aGVlbCwgYW5kIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gQ1BBTiAoIGh0dHA6Ly93d3cuY3Bhbi5vcmcvICkuIEEgbnVtYmVyIG9mIHBvcHVsYXIgbW9kdWxlcyBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgUGVybCBkaXN0cmlidXRpb24gaXRzZWxmLgoKQ2F0ZWdvcmllcyBvZiBtb2R1bGVzIHJhbmdlIGZyb20gdGV4dCBtYW5pcHVsYXRpb24gdG8gbmV0d29yayBwcm90b2NvbHMgdG8gZGF0YWJhc2UgaW50ZWdyYXRpb24gdG8gZ3JhcGhpY3MuIEEgY2F0ZWdvcml6ZWQgbGlzdCBvZiBtb2R1bGVzIGlzIGFsc28gYXZhaWxhYmxlIGZyb20gQ1BBTi4KClRvIGxlYXJuIGhvdyB0byBpbnN0YWxsIG1vZHVsZXMgeW91IGRvd25sb2FkIGZyb20gQ1BBTiwgcmVhZCBwZXJsbW9kaW5zdGFsbAoKVG8gbGVhcm4gaG93IHRvIHVzZSBhIHBhcnRpY3VsYXIgbW9kdWxlLCB1c2UgcGVybGRvYyBNb2R1bGU6Ok5hbWUgLiBUeXBpY2FsbHkgeW91IHdpbGwgd2FudCB0byB1c2UgTW9kdWxlOjpOYW1lICwgd2hpY2ggd2lsbCB0aGVuIGdpdmUgeW91IGFjY2VzcyB0byBleHBvcnRlZCBmdW5jdGlvbnMgb3IgYW4gT08gaW50ZXJmYWNlIHRvIHRoZSBtb2R1bGUuCgpwZXJsZmFxIGNvbnRhaW5zIHF1ZXN0aW9ucyBhbmQgYW5zd2VycyByZWxhdGVkIHRvIG1hbnkgY29tbW9uIHRhc2tzLCBhbmQgb2Z0ZW4gcHJvdmlkZXMgc3VnZ2VzdGlvbnMgZm9yIGdvb2QgQ1BBTiBtb2R1bGVzIHRvIHVzZS4KCnBlcmxtb2QgZGVzY3JpYmVzIFBlcmwgbW9kdWxlcyBpbiBnZW5lcmFsLiBwZXJsbW9kbGliIGxpc3RzIHRoZSBtb2R1bGVzIHdoaWNoIGNhbWUgd2l0aCB5b3VyIFBlcmwgaW5zdGFsbGF0aW9uLgoKSWYgeW91IGZlZWwgdGhlIHVyZ2UgdG8gd3JpdGUgUGVybCBtb2R1bGVzLCBwZXJsbmV3bW9kIHdpbGwgZ2l2ZSB5b3UgZ29vZCBhZHZpY2UuCicgeCAyMDAKICAgICksICAgICMgY3JlYXRlIGEgcmVhbGx5IGJpZyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyAyMDAgdGltZXMKCiAgICAjICAgIE1lc3NhZ2VJRCA9PiAnPGFzZGFzZGFzZC4xMjNAZXhhbXBsZS5jb20+JywKICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgIEhpc3RvcnlUeXBlICAgID0+ICdPd25lclVwZGF0ZScsCiAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICBOb0FnZW50Tm90aWZ5ICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzZW5kIGFnZW50IG5vdGlmaWNhdGlvbnMKKTsKCiRTZWxmLT5UcnVlKAogICAgJEFydGljbGVJRCwKICAgICdBcnRpY2xlQ3JlYXRlKCknLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldE9iamVjdC0+QXJ0aWNsZUNvdW50KCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKSwKICAgIDEsCiAgICAnQXJ0aWNsZUNvdW50JywKKTsKCm15ICVBcnRpY2xlID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUdldCggQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQgKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7VGl0bGV9LAogICAgJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgICdBcnRpY2xlR2V0KCknLAopOwokU2VsZi0+VHJ1ZSgKICAgICRBcnRpY2xle0Zyb219IGVxCiAgICAgICAgJ1NvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgICdBcnRpY2xlR2V0KCknLAopOwoKZm9yIG15ICRLZXkgKHF3KCBCb2R5IFN1YmplY3QgRnJvbSBUbyBSZXBseVRvICkpIHsKICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZVVwZGF0ZSgKICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICBLZXkgICAgICAgPT4gJEtleSwKICAgICAgICBWYWx1ZSAgICAgPT4gIk5ldyAkS2V5IiwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICdBcnRpY2xlVXBkYXRlKCknLAogICAgKTsKICAgIG15ICVBcnRpY2xlMiA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVHZXQoIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlEICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEFydGljbGUyeyRLZXl9LAogICAgICAgICJOZXcgJEtleSIsCiAgICAgICAgJ0FydGljbGVVcGRhdGUoKScsCiAgICApOwoKICAgICMgc2V0IG9sZCB2YWx1ZQogICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5BcnRpY2xlVXBkYXRlKAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXskS2V5fSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgKTsKfQoKbXkgJFRpY2tldFNlYXJjaFRpY2tldE51bWJlciA9IHN1YnN0ciAkVGlja2V0e1RpY2tldE51bWJlcn0sIDAsIDEwOwpteSAlVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0U2VhcmNoVGlja2V0TnVtYmVyIC4gJyUnLCAnJW5vdCBleGlzaXRpbmclJyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyIGFzIEhBU0hSRUYpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIpJywKKTsKCm15ICRDb3VudCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQ09VTlQnLAogICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5JcygKICAgICRDb3VudCwKICAgIDEsCiAgICAnVGlja2V0U2VhcmNoKCkgKENPVU5UOlRpY2tldE51bWJlciknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnMTIzNCcgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcltBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgVGl0bGUgICAgICA9PiAkVGlja2V0e1RpdGxlfSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGl0bGUpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgVGl0bGUgICAgICA9PiBbICRUaWNrZXR7VGl0bGV9LCAnU29tZVRpdGxlQUJDJyBdLAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaXRsZVtBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJJRCA9PiAkVGlja2V0e0N1c3RvbWVySUR9LAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDdXN0b21lcklEKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIEN1c3RvbWVySUQgPT4gWyAkVGlja2V0e0N1c3RvbWVySUR9LCAnTFVMVScgXSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3VzdG9tZXJJRFtBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJJRCA9PiBbJ0xVTFUnXSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDdXN0b21lcklEW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VyfSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDdXN0b21lclVzZXIpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAsCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiBbICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LCAnMTIzNCcgXSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDdXN0b21lclVzZXJbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyICAgICAgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgVGl0bGUgICAgICAgICAgICAgPT4gJFRpY2tldHtUaXRsZX0sCiAgICBDdXN0b21lcklEICAgICAgICA9PiAkVGlja2V0e0N1c3RvbWVySUR9LAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRpY2tldHtDdXN0b21lclVzZXJJRH0sCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyLFRpdGxlLEN1c3RvbWVySUQsQ3VzdG9tZXJVc2VySUQpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgICAgICA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFRpdGxlICAgICAgICAgICAgID0+IFsgJFRpY2tldHtUaXRsZX0sICcxMjMnIF0sCiAgICBDdXN0b21lcklEICAgICAgICA9PiBbICRUaWNrZXR7Q3VzdG9tZXJJRH0sICcxMjEzNDIxJyBdLAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gWyAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwgJ2lhZGFzZCcgXSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsVGl0bGUsQ3VzdG9tZXJJRCxDdXN0b21lclVzZXJbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICdBQkMnIF0sCiAgICBTdGF0ZVR5cGUgICAgPT4gJ0Nsb3NlZCcsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsU3RhdGVUeXBlOkNsb3NlZCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdPcGVuJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsU3RhdGVUeXBlOk9wZW4pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQm9keSAgICAgICAgICAgICAgICA9PiAnd3JpdGUgcGVybCBtb2R1bGVzJywKICAgIENvbmRpdGlvbklubGluZSAgICAgPT4gMSwKICAgIENvbnRlbnRTZWFyY2hQcmVmaXggPT4gJyonLAogICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICBTdGF0ZVR5cGUgICAgICAgICAgID0+ICdDbG9zZWQnLAogICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpCb2R5LFN0YXRlVHlwZTpDbG9zZWQpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQm9keSAgICAgICAgICAgICAgICA9PiAnd3JpdGUgcGVybCBtb2R1bGVzJywKICAgIENvbmRpdGlvbklubGluZSAgICAgPT4gMSwKICAgIENvbnRlbnRTZWFyY2hQcmVmaXggPT4gJyonLAogICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICBTdGF0ZVR5cGUgICAgICAgICAgID0+ICdPcGVuJywKICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAhJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkJvZHksU3RhdGVUeXBlOk9wZW4pJywKKTsKCiRUaWNrZXRPYmplY3QtPk1vdmVUaWNrZXQoCiAgICBRdWV1ZSAgICAgICAgICAgICAgPT4gJ0p1bmsnLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokVGlja2V0T2JqZWN0LT5Nb3ZlVGlja2V0KAogICAgUXVldWUgICAgICAgICAgICAgID0+ICdSYXcnLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgpteSAlSEQgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5VGlja2V0R2V0KAogICAgU3RvcFllYXIgID0+IDQwMDAsCiAgICBTdG9wTW9udGggPT4gMSwKICAgIFN0b3BEYXkgICA9PiAxLAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEZvcmNlICAgICA9PiAxLAopOwpteSAkUXVldWVMb29rdXBJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRIRHtRdWV1ZX0gKTsKJFNlbGYtPklzKAogICAgJFF1ZXVlTG9va3VwSUQsCiAgICAkSER7UXVldWVJRH0sCiAgICAnSGlzdG9yeVRpY2tldEdldCgpIENoZWNrIGhpc3RvcnkgcXVldWUnLAopOwoKbXkgJFRpY2tldE1vdmUgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlVGlja2V0KAogICAgUXVldWUgICAgICAgICAgICAgID0+ICdKdW5rJywKICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRNb3ZlLAogICAgJ01vdmVUaWNrZXQoKScsCik7CgpteSAkVGlja2V0U3RhdGUgPSAkVGlja2V0T2JqZWN0LT5TdGF0ZVNldCgKICAgIFN0YXRlICAgID0+ICdvcGVuJywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFN0YXRlLAogICAgJ1N0YXRlU2V0KCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdPcGVuJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6T3BlbiknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdDbG9zZWQnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6Q2xvc2VkKScsCik7Cgpmb3IgbXkgJENvbmRpdGlvbiAoCiAgICAnKFNvbWUmJkFnZW50KScsCiAgICAnU29tZSYmQWdlbnQnLAogICAgJyhTb21lK0FnZW50KScsCiAgICAnIChTb21lK0FnZW50KScsCiAgICAnIChTb21lK0FnZW50KSAgJywKICAgICdTb21lJiZBZ2VudCcsCiAgICAnU29tZStBZ2VudCcsCiAgICAnIFNvbWUrQWdlbnQnLAogICAgJ1NvbWUrQWdlbnQgJywKICAgICcgU29tZStBZ2VudCAnLAogICAgJyghU29tZVdvcmRTaG91bGROb3RGb3VuZHx8KFNvbWUrQWdlbnQpKScsCiAgICAnKChTb21lK0FnZW50KXx8KFNvbWVBZ2VudE5vdEZvdW5kfHxBZ2VudE5vdEZvdW5kKSknLAogICAgJyJTb21lIEFnZW50IFNvbWUiJywKICAgICcoIlNvbWUgQWdlbnQgU29tZSIpJywKICAgICchIlNvbWUgU29tZSBBZ2VudCInLAogICAgJyghIlNvbWUgU29tZSBBZ2VudCIpJywKICAgICkKewogICAgJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKCiAgICAgICAgIyByZXN1bHQgKHJlcXVpcmVkKQogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCgogICAgICAgICMgcmVzdWx0IGxpbWl0CiAgICAgICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgIEZyb20gICAgICAgICAgICAgICAgPT4gJENvbmRpdGlvbiwKICAgICAgICBDb25kaXRpb25JbmxpbmUgICAgID0+IDEsCiAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFBlcm1pc3Npb24gICAgICAgICAgPT4gJ3J3JywKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAgICAgIlRpY2tldFNlYXJjaCgpIChIQVNIOkZyb20sQ29uZGl0aW9uSW5saW5lLEZyb209JyRDb25kaXRpb24nKSIsCiAgICApOwp9Cgpmb3IgbXkgJENvbmRpdGlvbiAoCiAgICAnKFNvbWVOb3RGb3VuZFdvcmQmJkFnZW50Tm90Rm91bmRXb3JkKScsCiAgICAnU29tZU5vdEZvdW5kV29yZHx8QWdlbnROb3RGb3VuZFdvcmQnLAogICAgJyBTb21lTm90Rm91bmRXb3JkfHxBZ2VudE5vdEZvdW5kV29yZCcsCiAgICAnU29tZU5vdEZvdW5kV29yZCYmQWdlbnROb3RGb3VuZFdvcmQnLAogICAgJ1NvbWVOb3RGb3VuZFdvcmQmJkFnZW50Tm90Rm91bmRXb3JkICAnLAogICAgJyhTb21lTm90Rm91bmRXb3JkIEFnZW50Tm90Rm91bmRXb3JkKScsCiAgICAnU29tZU5vdEZvdW5kV29yZCYmQWdlbnROb3RGb3VuZFdvcmQnLAogICAgJyhTb21lV29yZFNob3VsZE5vdEZvdW5kfHwoIVNvbWUrIUFnZW50KSknLAogICAgJygoU29tZU5vdEZvdW5kJiZBZ2VudCl8fChTb21lQWdlbnROb3RGb3VuZHx8QWdlbnROb3RGb3VuZCkpJywKICAgICchIlNvbWUgQWdlbnQgU29tZSInLAogICAgJyghIlNvbWUgQWdlbnQgU29tZSIpJywKICAgICciU29tZSBTb21lIEFnZW50IicsCiAgICAnKCJTb21lIFNvbWUgQWdlbnQiKScsCiAgICApCnsKICAgICVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCgogICAgICAgICMgcmVzdWx0IChyZXF1aXJlZCkKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAoKICAgICAgICAjIHJlc3VsdCBsaW1pdAogICAgICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICBGcm9tICAgICAgICAgICAgICAgID0+ICRDb25kaXRpb24sCiAgICAgICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgICAgIENvbnRlbnRTZWFyY2hQcmVmaXggPT4gJyonLAogICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uICAgICAgICAgID0+ICdydycsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgKCAhJFRpY2tldElEc3skVGlja2V0SUR9ICksCiAgICAgICAgIlRpY2tldFNlYXJjaCgpIChIQVNIOkZyb20sQ29uZGl0aW9uSW5saW5lLEZyb209JyRDb25kaXRpb24nKSIsCiAgICApOwp9CgpteSAkVGlja2V0UHJpb3JpdHkgPSAkVGlja2V0T2JqZWN0LT5Qcmlvcml0eVNldCgKICAgIFByaW9yaXR5ID0+ICcyIGxvdycsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRQcmlvcml0eSwKICAgICdQcmlvcml0eVNldCgpJywKKTsKCiMgZ2V0IHRpY2tldCBkYXRhCm15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2F2ZSBjdXJyZW50IGNoYW5nZV90aW1lCm15ICRDaGFuZ2VUaW1lID0gJFRpY2tldERhdGF7Q2hhbmdlZH07CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgpteSAkVGlja2V0VGl0bGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUaXRsZVVwZGF0ZSgKICAgIFRpdGxlICAgID0+ICdTb21lIFRpdGxlIDEyMzQ1NjcnLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0VGl0bGUsCiAgICAnVGlja2V0VGl0bGVVcGRhdGUoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0VGl0bGVVcGRhdGUoKScsCik7CgojIGNoZWNrIGlmIHdlIGhhdmUgYSBUaWNrZXQgVGl0bGUgVXBkYXRlIGhpc3RvcnkgcmVjb3JkCm15IEBIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKbXkgJEhpc3RvcnlJdGVtID0gcG9wIEBIaXN0b3J5TGluZXM7CiRTZWxmLT5JcygKICAgICRIaXN0b3J5SXRlbS0+e0hpc3RvcnlUeXBlfSwKICAgICdUaXRsZVVwZGF0ZScsCiAgICAiVGlja2V0VGl0bGVVcGRhdGUgLSBmb3VuZCBIaXN0b3J5SXRlbSIsCik7CgokU2VsZi0+SXMoCiAgICAkSGlzdG9yeUl0ZW0tPntOYW1lfSwKICAgICclJVNvbWUgVGlja2V0X1RpdGxlJSVTb21lIFRpdGxlIDEyMzQ1NjcnLAogICAgIlRpY2tldFRpdGxlVXBkYXRlIC0gRm91bmQgbmV3IHRpdGxlIiwKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCiMgc2V0IHVubG9jayB0aW1lb3V0Cm15ICRVbmxvY2tUaW1lb3V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0VW5sb2NrVGltZW91dFVwZGF0ZSgKICAgIFVubG9ja1RpbWVvdXQgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSArIDEwMDAwLAogICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRVbmxvY2tUaW1lb3V0LAogICAgJ1RpY2tldFVubG9ja1RpbWVvdXRVcGRhdGUoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0VW5sb2NrVGltZW91dFVwZGF0ZSgpJywKKTsKCiMgc2F2ZSBjdXJyZW50IGNoYW5nZV90aW1lCiRDaGFuZ2VUaW1lID0gJFRpY2tldERhdGF7Q2hhbmdlZH07CgojIHNhdmUgY3VycmVudCBxdWV1ZQpteSAkQ3VycmVudFF1ZXVlSUQgPSAkVGlja2V0RGF0YXtRdWV1ZUlEfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCm15ICROZXdRdWV1ZSA9ICRDdXJyZW50UXVldWVJRCAhPSAxID8gMSA6IDI7CgojIHNldCBxdWV1ZQpteSAkVGlja2V0UXVldWVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRRdWV1ZVNldCgKICAgIFF1ZXVlSUQgID0+ICROZXdRdWV1ZSwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRRdWV1ZVNldCwKICAgICdUaWNrZXRRdWV1ZVNldCgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRRdWV1ZVNldCgpJywKKTsKCiMgcmVzdG9yZSBxdWV1ZQokVGlja2V0UXVldWVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRRdWV1ZVNldCgKICAgIFF1ZXVlSUQgID0+ICRDdXJyZW50UXVldWVJRCwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyBzYXZlIGN1cnJlbnQgdHlwZQpteSAkQ3VycmVudFRpY2tldFR5cGUgPSAkVGlja2V0RGF0YXtUeXBlSUR9OwoKIyB3YWl0IDUgc2Vjb25kcwokSGVscGVyT2JqZWN0LT5GaXhlZFRpbWVBZGRTZWNvbmRzKDUpOwoKIyBjcmVhdGUgYSB0ZXN0IHR5cGUKbXkgJFR5cGVJRCA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgTmFtZSAgICA9PiAnVW5pdCBUZXN0IE5ldyBUeXBlJyAuIGludCByYW5kIDEwMDAwLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzZXQgdHlwZQpteSAkVGlja2V0VHlwZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFR5cGVTZXQoCiAgICBUeXBlSUQgICA9PiAkVHlwZUlELAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFR5cGVTZXQsCiAgICAnVGlja2V0VHlwZVNldCgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRUeXBlU2V0KCknLAopOwoKIyByZXN0b3JlIHR5cGUKJFRpY2tldFR5cGVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlU2V0KAogICAgVHlwZUlEICAgPT4gJEN1cnJlbnRUaWNrZXRUeXBlLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2V0IGFzIGludmFsaWQgdGhlIHRlc3QgdHlwZQokVHlwZU9iamVjdC0+VHlwZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFR5cGVJRCwKICAgIE5hbWUgICAgPT4gJ1VuaXQgVGVzdCBOZXcgVHlwZScgLiBpbnQgcmFuZCAxMDAwMCwKICAgIFZhbGlkSUQgPT4gMiwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgY3JlYXRlIGEgdGVzdCBzZXJ2aWNlCm15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJ1VuaXQgVGVzdCBOZXcgU2VydmljZScgLiBpbnQgcmFuZCAxMDAwMCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIENvbW1lbnQgPT4gJ1VuaXQgVGVzdCBDb21tZW50JywKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgd2FpdCAxIHNlY29uZHMKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcygxKTsKCiMgc2V0IHR5cGUKbXkgJFRpY2tldFNlcnZpY2VTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlU2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRTZXJ2aWNlU2V0LAogICAgJ1RpY2tldFNlcnZpY2VTZXQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0U2VydmljZVNldCgpJywKKTsKCiMgc2V0IGFzIGludmFsaWQgdGhlIHRlc3Qgc2VydmljZQokU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgTmFtZSAgICAgID0+ICdVbml0IFRlc3QgTmV3IFNlcnZpY2UnIC4gaW50IHJhbmQgMTAwMDAsCiAgICBWYWxpZElEICAgPT4gMiwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCm15ICRUaWNrZXRFc2NhbGF0aW9uSW5kZXhCdWlsZCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkLAogICAgJ1RpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKCknLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgY3JlYXRlIGEgdGVzdCBTTEEKbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgTmFtZSAgICA9PiAnVW5pdCBUZXN0IE5ldyBTTEEnIC4gaW50IHJhbmQgMTAwMDAsCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICBVc2VySUQgID0+IDEsCik7CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgojIHNldCBTTEEKbXkgJFRpY2tldFNMQVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNMQVNldCgKICAgIFNMQUlEICAgID0+ICRTTEFJRCwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRTTEFTZXQsCiAgICAnVGlja2V0U0xBU2V0KCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFNMQVNldCgpJywKKTsKCiMgc2V0IGFzIGludmFsaWQgdGhlIHRlc3QgU0xBCiRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgIFNMQUlEICAgPT4gJFNMQUlELAogICAgTmFtZSAgICA9PiAnVW5pdCBUZXN0IE5ldyBTTEEnIC4gaW50IHJhbmQgMTAwMDAsCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAkVGlja2V0TG9jayA9ICRUaWNrZXRPYmplY3QtPkxvY2tTZXQoCiAgICBMb2NrICAgICAgICAgICAgICAgPT4gJ2xvY2snLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldExvY2ssCiAgICAnTG9ja1NldCgpJywKKTsKCiMgVGVzdCBDcmVhdGVkVXNlcklEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgPT4gMTAwLAogICAgQ3JlYXRlZFVzZXJJRHMgPT4gWyAxLCA0NTUsIDMyIF0sCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFVzZXJJRHNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFByaW9yaXRpZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRQcmlvcml0aWVzID0+IFsgJzIgbG93JywgJzMgbm9ybWFsJyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRQcmlvcml0aWVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRQcmlvcml0eUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUHJpb3JpdHlJRHMgPT4gWyAyLCAzIF0sCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkUHJpb3JpdHlJRHNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFN0YXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRTdGF0ZXMgPT4gWydjbG9zZWQgc3VjY2Vzc2Z1bCddLAogICAgVXNlcklEICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkU3RhdGVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRTdGF0ZUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkU3RhdGVJRHMgPT4gWzJdLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFN0YXRlSURzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRRdWV1ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUXVldWVzID0+IFsnUmF3J10sCiAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRRdWV1ZXNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFF1ZXVlSURzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRRdWV1ZUlEcyA9PiBbIDIsIDMgXSwKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRRdWV1ZUlEc1tBcnJheV0pJywKKTsKCiMgVGVzdCBUaWNrZXRDcmVhdGVUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IEFydGljbGVDcmVhdGVUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0TGFzdENoYW5nZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldExhc3RDaGFuZ2VUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZQpteSAkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSAtICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlCiRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKJVRpY2tldElEcyAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSAtICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZQokU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiVUaWNrZXRJRHMgID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0TGFzdENoYW5nZU9sZGVyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZU9sZGVyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lT2xkZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZU9sZGVyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENsb3NlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlT2xkZXJEYXRlCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENsb3NlVGltZU9sZGVyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSAtICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENsb3NlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKbXkgJVRpY2tldDIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntUaXRsZX0sCiAgICAnU29tZSBUaXRsZSAxMjM0NTY3JywKICAgICdUaWNrZXRHZXQoKSAoVGl0bGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7UXVldWV9LAogICAgJ0p1bmsnLAogICAgJ1RpY2tldEdldCgpIChRdWV1ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntQcmlvcml0eX0sCiAgICAnMiBsb3cnLAogICAgJ1RpY2tldEdldCgpIChQcmlvcml0eSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntTdGF0ZX0sCiAgICAnb3BlbicsCiAgICAnVGlja2V0R2V0KCkgKFN0YXRlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXQye0xvY2t9LAogICAgJ2xvY2snLAogICAgJ1RpY2tldEdldCgpIChMb2NrKScsCik7CgolQXJ0aWNsZSA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVHZXQoIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlEICk7CiRTZWxmLT5JcygKICAgICRBcnRpY2xle1RpdGxlfSwKICAgICdTb21lIFRpdGxlIDEyMzQ1NjcnLAogICAgJ0FydGljbGVHZXQoKSAoVGl0bGUpJywKKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7UXVldWV9LAogICAgJ0p1bmsnLAogICAgJ0FydGljbGVHZXQoKSAoUXVldWUpJywKKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7UHJpb3JpdHl9LAogICAgJzIgbG93JywKICAgICdBcnRpY2xlR2V0KCkgKFByaW9yaXR5KScsCik7CiRTZWxmLT5JcygKICAgICRBcnRpY2xle1N0YXRlfSwKICAgICdvcGVuJywKICAgICdBcnRpY2xlR2V0KCkgKFN0YXRlKScsCik7CiRTZWxmLT5JcygKICAgICRBcnRpY2xle093bmVyfSwKICAgICdyb290QGxvY2FsaG9zdCcsCiAgICAnQXJ0aWNsZUdldCgpIChPd25lciknLAopOwokU2VsZi0+SXMoCiAgICAkQXJ0aWNsZXtSZXNwb25zaWJsZX0sCiAgICAncm9vdEBsb2NhbGhvc3QnLAogICAgJ0FydGljbGVHZXQoKSAoUmVzcG9uc2libGUpJywKKTsKJFNlbGYtPklzKAogICAgJEFydGljbGV7TG9ja30sCiAgICAnbG9jaycsCiAgICAnQXJ0aWNsZUdldCgpIChMb2NrKScsCik7CgojZm9yICggMSAuLiAxNiApIHsKIyAgICAkU2VsZi0+SXMoCiMgICAgICAgICRBcnRpY2xleyAnVGlja2V0RnJlZUtleScgLiAkXyB9LAojICAgICAgICAnSGFuc18nIC4gJF8sCiMgICAgICAgICJBcnRpY2xlR2V0KCkgKFRpY2tldEZyZWVLZXkkXykiLAojICAgICk7CiMgICAgJFNlbGYtPklzKAojICAgICAgICAkQXJ0aWNsZXsgJ1RpY2tldEZyZWVUZXh0JyAuICRfIH0sCiMgICAgICAgICdNYXhfJyAuICRfLAojICAgICAgICAiQXJ0aWNsZUdldCgpIChUaWNrZXRGcmVlVGV4dCRfKSIsCiMgICAgKTsKI30KCm15IEBNb3ZlUXVldWVMaXN0ID0gJFRpY2tldE9iamVjdC0+TW92ZVF1ZXVlTGlzdCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFR5cGUgICAgID0+ICdOYW1lJywKKTsKCiRTZWxmLT5JcygKICAgICRNb3ZlUXVldWVMaXN0WzBdLAogICAgJ1JhdycsCiAgICAnTW92ZVF1ZXVlTGlzdCgpIChSYXcpJywKKTsKJFNlbGYtPklzKAogICAgJE1vdmVRdWV1ZUxpc3RbJCNNb3ZlUXVldWVMaXN0XSwKICAgICdKdW5rJywKICAgICdNb3ZlUXVldWVMaXN0KCkgKEp1bmspJywKKTsKCm15ICRUaWNrZXRBY2NvdW50VGltZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgVGltZVVuaXQgID0+ICc0LjUnLAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRBY2NvdW50VGltZSwKICAgICdUaWNrZXRBY2NvdW50VGltZSgpIDEnLAopOwoKbXkgJFRpY2tldEFjY291bnRUaW1lMiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgVGltZVVuaXQgID0+ICc0MTIzLjUzJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUyLAogICAgJ1RpY2tldEFjY291bnRUaW1lKCkgMicsCik7CgpteSAkVGlja2V0QWNjb3VudFRpbWUzID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNjb3VudFRpbWUoCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICBUaW1lVW5pdCAgPT4gJzQsNTMnLAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRBY2NvdW50VGltZTMsCiAgICAnVGlja2V0QWNjb3VudFRpbWUoKSAzJywKKTsKCm15ICRBY2NvdW50ZWRUaW1lID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNjb3VudGVkVGltZUdldCggVGlja2V0SUQgPT4gJFRpY2tldElEICk7CgokU2VsZi0+SXMoCiAgICAkQWNjb3VudGVkVGltZSwKICAgIDQxMzIuNTYsCiAgICAnVGlja2V0QWNjb3VudGVkVGltZUdldCgpJywKKTsKCm15ICRBY2NvdW50ZWRUaW1lMiA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVBY2NvdW50ZWRUaW1lR2V0KAogICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCik7CgokU2VsZi0+SXMoCiAgICAkQWNjb3VudGVkVGltZTIsCiAgICA0MTMyLjU2LAogICAgJ0FydGljbGVBY2NvdW50ZWRUaW1lR2V0KCknLAopOwoKbXkgKCAkU2VjLCAkTWluLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhciApID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSgKICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKKTsKCm15ICggJFN0b3BTZWMsICRTdG9wTWluLCAkU3RvcEhvdXIsICRTdG9wRGF5LCAkU3RvcE1vbnRoLCAkU3RvcFllYXIgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICBTeXN0ZW1UaW1lID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCkgLSA2MCAqIDYwICogMjQsCik7CgpteSAlVGlja2V0U3RhdHVzID0gJFRpY2tldE9iamVjdC0+SGlzdG9yeVRpY2tldFN0YXR1c0dldCgKICAgIFN0b3BZZWFyICAgPT4gJFllYXIsCiAgICBTdG9wTW9udGggID0+ICRNb250aCwKICAgIFN0b3BEYXkgICAgPT4gJERheSwKICAgIFN0YXJ0WWVhciAgPT4gJFN0b3BZZWFyLAogICAgU3RhcnRNb250aCA9PiAkU3RvcE1vbnRoLAogICAgU3RhcnREYXkgICA9PiAkU3RvcERheSwKKTsKCmlmICggJFRpY2tldFN0YXR1c3skVGlja2V0SUR9ICkgewogICAgbXkgJVRpY2tldEhpc3RvcnkgPSAleyAkVGlja2V0U3RhdHVzeyRUaWNrZXRJRH0gfTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtUaWNrZXROdW1iZXJ9LAogICAgICAgICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAiSGlzdG9yeVRpY2tldFN0YXR1c0dldCgpIChUaWNrZXROdW1iZXIpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7VGlja2V0SUR9LAogICAgICAgICRUaWNrZXRJRCwKICAgICAgICAiSGlzdG9yeVRpY2tldFN0YXR1c0dldCgpIChUaWNrZXRJRCkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtDcmVhdGVVc2VySUR9LAogICAgICAgIDEsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoQ3JlYXRlVXNlcklEKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1F1ZXVlfSwKICAgICAgICAnSnVuaycsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoUXVldWUpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7Q3JlYXRlUXVldWV9LAogICAgICAgICdSYXcnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVF1ZXVlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1N0YXRlfSwKICAgICAgICAnb3BlbicsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoU3RhdGUpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7Q3JlYXRlU3RhdGV9LAogICAgICAgICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoQ3JlYXRlU3RhdGUpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7UHJpb3JpdHl9LAogICAgICAgICcyIGxvdycsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoUHJpb3JpdHkpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7Q3JlYXRlUHJpb3JpdHl9LAogICAgICAgICczIG5vcm1hbCcsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoQ3JlYXRlUHJpb3JpdHkpIiwKICAgICk7CgogICAgIyAgICBmb3IgKCAxIC4uIDE2ICkgewogICAgIyAgICAgICAgJFNlbGYtPklzKAogICAgIyAgICAgICAgICAgICRUaWNrZXRIaXN0b3J5eyAnVGlja2V0RnJlZUtleScgLiAkXyB9LAogICAgIyAgICAgICAgICAgICdIYW5zXycgLiAkXywKICAgICMgICAgICAgICAgICAiSGlzdG9yeVRpY2tldFN0YXR1c0dldCgpIChUaWNrZXRGcmVlS2V5JF8pIiwKICAgICMgICAgICAgICk7CiAgICAjICAgICAgICAkU2VsZi0+SXMoCiAgICAjICAgICAgICAgICAgJFRpY2tldEhpc3Rvcnl7ICdUaWNrZXRGcmVlVGV4dCcgLiAkXyB9LAogICAgIyAgICAgICAgICAgICdNYXhfJyAuICRfLAogICAgIyAgICAgICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFRpY2tldEZyZWVUZXh0JF8pIiwKICAgICMgICAgICAgICk7CiAgICAjICAgIH0KfQplbHNlIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgJ0hpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKScsCiAgICApOwp9CgpteSAkRGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRGVsZXRlLAogICAgJ1RpY2tldERlbGV0ZSgpJywKKTsKCm15ICREZWxldGVDaGVjayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkRGVsZXRlQ2hlY2ssCiAgICAnVGlja2V0RGVsZXRlKCkgd29ya2VkJywKKTsKCm15ICRDdXN0b21lck5vID0gJzQyJyAuIGludCByYW5kIDFfMDAwXzAwMDsKCiMgdGlja2V0IHNlYXJjaCBzb3J0L29yZGVyIHRlc3QKbXkgJFRpY2tldElEU29ydE9yZGVyMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUgLSB0aWNrZXQgc29ydC9vcmRlciBieSB0ZXN0cycsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAZXhhbXBsZS5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCm15ICVUaWNrZXRDcmVhdGVkID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEU29ydE9yZGVyMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXIyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAZXhhbXBsZS5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlck9iamVjdC0+Rml4ZWRUaW1lQWRkU2Vjb25kcygyKTsKCm15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICBTdGF0ZSAgICA9PiAnb3BlbicsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgVXNlcklEICAgPT4gMSwKKTsKCm15ICVUaWNrZXRVcGRhdGVkID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEU29ydE9yZGVyMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXNOb3QoCiAgICAkVGlja2V0Q3JlYXRlZHtDaGFuZ2VkfSwKICAgICRUaWNrZXRVcGRhdGVke0NoYW5nZWR9LAogICAgJ1RpY2tldFVwZGF0ZWQgZm9yIHNvcnQgLSBjaGFuZ2UgdGltZSB3YXMgdXBkYXRlZCcKICAgICAgICAuICIgJFRpY2tldENyZWF0ZWR7Q2hhbmdlZH0gbmUgJFRpY2tldFVwZGF0ZWR7Q2hhbmdlZH0iLAopOwoKIyBmaW5kIG5ld2VzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpteSBAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckBleGFtcGxlLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdVcCcgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdQcmlvcml0eScsICdBZ2UnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoUHJpb3JpdHkgKERvd24pLCBBZ2UgKFVwKSknLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckBleGFtcGxlLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChEb3duKSwgQWdlIChEb3duKSknLAopOwoKIyBmaW5kIGxhc3QgbW9kaWZpZWQgdGlja2V0IGJ5IGNoYW5nZWQgdGltZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckBleGFtcGxlLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsIF0sCiAgICBTb3J0QnkgICAgICAgPT4gWydDaGFuZ2VkJ10sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyMSwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChDaGFuZ2VkIChEb3duKSknCiAgICAgICAgLiAiJFRpY2tldElEc1NvcnRPcmRlclswXSBpbnN0ZWFkIG9mICRUaWNrZXRJRFNvcnRPcmRlcjEiLAopOwoKIyBmaW5kIG9sZGVzdCBtb2RpZmllZCBieSBjaGFuZ2VkIHRpbWUKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAZXhhbXBsZS5jb20nLAogICAgT3JkZXJCeSAgICAgID0+IFsgJ1VwJywgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdDaGFuZ2VkJywgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKENoYW5nZWQgKFVwKSkpJwogICAgICAgIC4gIiRUaWNrZXRJRHNTb3J0T3JkZXJbMF0gIGluc3RlYWQgb2YgJFRpY2tldElEU29ydE9yZGVyMiIsCik7CgpteSAkVGlja2V0SURTb3J0T3JkZXIzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHdhaXQgMiBzZWNvbmRzCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXI0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldCBieSBwcmlvcml0eSwgYWdlCkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE9yZGVyQnkgICAgICA9PiBbICdEb3duJywgJ0Rvd24nIF0sCiAgICBTb3J0QnkgICAgICAgPT4gWyAnUHJpb3JpdHknLCAnQWdlJyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjQsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoUHJpb3JpdHkgKERvd24pLCBBZ2UgKERvd24pKScsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldCBieSBwcmlvcml0eSwgYWdlCkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE9yZGVyQnkgICAgICA9PiBbICdVcCcsICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChVcCksIEFnZSAoRG93bikpJywKKTsKCiMgZmluZCBuZXdlc3QgdGlja2V0CkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIE9yZGVyQnkgICAgICA9PiAnRG93bicsCiAgICBTb3J0QnkgICAgICAgPT4gJ0FnZScsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyNCwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChBZ2UgKERvd24pKScsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldApAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckBleGFtcGxlLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gJ1VwJywKICAgIFNvcnRCeSAgICAgICA9PiAnQWdlJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKEFnZSAoVXApKScsCik7CgokQ291bnQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0NPVU5UJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRDb3VudCwKICAgIDQsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgY291bnQgZm9yIGNyZWF0ZWQgdGlja2V0cycsCik7Cgpmb3IgbXkgJFRpY2tldElERGVsZXRlICgKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsICRUaWNrZXRJRFNvcnRPcmRlcjIsICRUaWNrZXRJRFNvcnRPcmRlcjMsCiAgICAkVGlja2V0SURTb3J0T3JkZXI0CiAgICApCnsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElERGVsZXRlLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICksCiAgICAgICAgIlRpY2tldERlbGV0ZSgpIiwKICAgICk7Cn0KCiMgLS0tCiMgYXZvaWQgU3RhdGVUeXBlIGFuZCBTdGF0ZVR5cGVJRCBwcm9ibGVtcyBpbiBUaWNrZXRTZWFyY2goKQojIC0tLQoKbXkgJVN0YXRlVHlwZUxpc3QgPSAkU3RhdGVPYmplY3QtPlN0YXRlVHlwZUxpc3QoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgeW91IG5lZWQgYSBoYXNoIHdpdGggdGhlIHN0YXRlIGFzIGtleSBhbmQgdGhlIHJlbGF0ZWQgU3RhdGVUeXBlIGFuZCBTdGF0ZVR5cGVJRCBhcwojIHJlZmVyZW5jZQpteSAlU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWU7CmZvciBteSAkU3RhdGVUeXBlSUQgKCBzb3J0IGtleXMgJVN0YXRlVHlwZUxpc3QgKSB7CiAgICBteSBATGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXRTdGF0ZXNCeVR5cGUoCiAgICAgICAgU3RhdGVUeXBlID0+IFsgJFN0YXRlVHlwZUxpc3R7JFN0YXRlVHlwZUlEfSBdLAogICAgICAgIFJlc3VsdCAgICA9PiAnTmFtZScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhBU0h8SUR8TmFtZQogICAgKTsKICAgIGZvciBteSAkSW5kZXggKEBMaXN0KSB7CiAgICAgICAgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRJbmRleH0tPntOYW1lfSA9ICRTdGF0ZVR5cGVMaXN0eyRTdGF0ZVR5cGVJRH07CiAgICAgICAgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRJbmRleH0tPntJRH0gICA9ICRTdGF0ZVR5cGVJRDsKICAgIH0KfQoKIyB0byBiZSBzdXJlIHRoYXQgeW91IGhhdmUgYSByZXN1bHQgdGlja2V0IGNyZWF0ZSBvbmUKJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTdGF0ZVR5cGVUZXN0JywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICduZXcnLAogICAgQ3VzdG9tZXJJRCAgID0+ICcxMjM0NjUnLAogICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckBleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKbXkgJVN0YXRlTGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVMaXN0KCBVc2VySUQgPT4gMSApOwoKIyBub3cgY2hlY2sgZXZlcnkgcG9zc2libGUgc3RhdGUKZm9yIG15ICRTdGF0ZSAoIHZhbHVlcyAlU3RhdGVMaXN0ICkgewogICAgJFRpY2tldE9iamVjdC0+U3RhdGVTZXQoCiAgICAgICAgU3RhdGUgICAgICAgICAgICAgID0+ICRTdGF0ZSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSBAVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgICAgIFRpdGxlICAgICAgICA9PiAnJVN0YXRlVHlwZVRlc3QlJywKICAgICAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgICAgICBTdGF0ZVR5cGVJRHMgPT4gWyAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JFN0YXRlfS0+e0lEfSBdLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSBAVGlja2V0SURzVHlwZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywKICAgICAgICBUaXRsZSAgICAgPT4gJyVTdGF0ZVR5cGVUZXN0JScsCiAgICAgICAgUXVldWVzICAgID0+IFsnUmF3J10sCiAgICAgICAgU3RhdGVUeXBlID0+IFsgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntOYW1lfSBdLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICRUaWNrZXRJRHNbMF0gKSB7CiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEc1swXSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgbm8gcmVzdWx0IHRoZSBTdGF0ZVR5cGVJRCBoYXNuJ3Qgd29ya2VkCiAgICAjIFRlc3QgaWYgdGhlcmUgaXMgYSByZXN1bHQsIGlmIEkgdXNlIFN0YXRlVHlwZUlEICRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57SUR9CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SURzWzBdLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAtIFN0YXRlVHlwZUlEIC0gZm91bmQgdGlja2V0IiwKICAgICk7CgojIGlmIGl0IGlzIG5vdCBlcXVhbCB0aGVuIHRoZXJlIGlzIGluIHRoZSB1c2luZyBvZiBTdGF0ZVR5cGUgb3IgU3RhdGVUeXBlSUQgYW4gZXJyb3IKIyBjaGVjayBpZiB5b3UgZ2V0IHRoZSBzYW1lIHJlc3VsdCBpZiB5b3UgdXNlIHRoZSBTdGF0ZVR5cGUgYXR0cmlidXRlIG9yIHRoZSBTdGF0ZVR5cGVJRHMgYXR0cmlidXRlLgojIFN0YXRlKCRTdGF0ZSkgU3RhdGVUeXBlKCRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57TmFtZX0pIGFuZCBTdGF0ZVR5cGVJRHMoJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntJRH0pCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEBUaWNrZXRJRHMsCiAgICAgICAgc2NhbGFyIEBUaWNrZXRJRHNUeXBlLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAtIFN0YXRlVHlwZSIsCiAgICApOwp9CgpteSAlVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCm15ICREaWZmICAgICAgICAgICAgICAgPSA2MDsKbXkgJEN1cnJlbnRTeXN0ZW1UaW1lICA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7Cm15ICRQZW5kaW5nVGltZVNldERpZmYgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgIERpZmYgICAgID0+ICREaWZmLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0RGlmZiwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gc2V0IGRpZmYiLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7UmVhbFRpbGxUaW1lTm90VXNlZH0sCiAgICAkQ3VycmVudFN5c3RlbVRpbWUgKyAkRGlmZiAqIDYwLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBkaWZmIHRpbWUgY2hlY2siLAopOwoKbXkgJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgWWVhciAgICAgPT4gJzIwMDMnLAogICAgTW9udGggICAgPT4gJzA4JywKICAgIERheSAgICAgID0+ICcxNCcsCiAgICBIb3VyICAgICA9PiAnMjInLAogICAgTWludXRlICAgPT4gJzA1JywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQiLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKbXkgJFBlbmRpbmdVbnRpbFRpbWUgPSAkVGltZU9iamVjdC0+RGF0ZTJTeXN0ZW1UaW1lKAogICAgWWVhciAgID0+ICcyMDAzJywKICAgIE1vbnRoICA9PiAnMDgnLAogICAgRGF5ICAgID0+ICcxNCcsCiAgICBIb3VyICAgPT4gJzIyJywKICAgIE1pbnV0ZSA9PiAnMDUnLAogICAgU2Vjb25kID0+ICcwMCcsCik7CgokUGVuZGluZ1VudGlsVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCkgLSAkUGVuZGluZ1VudGlsVGltZTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnLScgLiAkUGVuZGluZ1VudGlsVGltZSwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gcmVhZCBiYWNrIiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFllYXIgICAgID0+ICcwJywKICAgIE1vbnRoICAgID0+ICcwJywKICAgIERheSAgICAgID0+ICcwJywKICAgIEhvdXIgICAgID0+ICcwJywKICAgIE1pbnV0ZSAgID0+ICcwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZXNldCIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0cmluZyAgID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQgc3RyaW5nIiwKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJFRpbWVPYmplY3QtPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgU3RyaW5nID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSAtICRQZW5kaW5nVW50aWxUaW1lOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICctJyAuICRQZW5kaW5nVW50aWxUaW1lLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZWFkIGJhY2siLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgU3RyaW5nICAgPT4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHJlc2V0IHN0cmluZyIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0cmluZyAgID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQgc3RyaW5nIiwKKTsKCm15ICRUaWNrZXRTdGF0ZVVwZGF0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0YXRlICAgID0+ICdwZW5kaW5nIHJlbWluZGVyJywKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gU2V0IHRvIHBlbmRpbmcgLSB0aW1lIHNob3VsZCBzdGlsbCBiZSB0aGVyZSIsCik7CgokVGlja2V0U3RhdGVVcGRhdGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCiAgICBTdGF0ZSAgICA9PiAnbmV3JywKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnMCcsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFNldCB0byBuZXcgLSBQZW5kaW5nIFRpbWUgbm90IHNldCIsCik7CgojIGNoZWNrIHRoYXQgc2VhcmNoZXMgd2l0aCBOZXdlckRhdGUgaW4gdGhlIGZ1dHVyZSBhcmUgbm90IGV4ZWN1dGVkCiRIZWxwZXJPYmplY3QtPkZpeGVkVGltZUFkZFNlY29uZHMoIC02MCAqIDYwICk7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSAoZnV0dXJlIGRhdGUpCiRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKJVRpY2tldElEcyAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSArICggNjAgKiA2MCApLAogICAgKSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gLTYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQokU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiVUaWNrZXRJRHMgID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgKyAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAtNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgKyAoIDYwICogNjAgKSwKICAgICksCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gLTYwKScsCik7CgojIHRoZSB0aWNrZXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAokVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyB0ZXN0cyBmb3Igc2VhcmNoaW5nIFN0YXRlVHlwZXMgdGhhdCBtaWdodCBub3QgaGF2ZSBzdGF0ZXMKIyB0aGlzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCByYXRoZXIgdGhlbiBhIGJpZyBTUUwgZXJyb3IKIyB0aGUgcHJvYmxlbSBpcywgd2UgY2FuJ3QgcmVhbGx5IHRlc3QgaWYgdGhlcmUgaXMgYW4gU1FMIGVycm9yIG9yIG5vdAojIHRpY2tldHNlYXJjaCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgYW55d2F5CgpteSBATmV3U3RhdGVzID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldFN0YXRlc0J5VHlwZSgKICAgIFN0YXRlVHlwZSA9PiBbJ25ldyddLAogICAgUmVzdWx0ICAgID0+ICdJRCcsCik7CgojIG1ha2Ugc3VyZSB3ZSBkb250IGhhdmUgdmFsaWQgc3RhdGVzIGZvciBzdGF0ZSB0eXBlIG5ldwpmb3IgbXkgJE5ld1N0YXRlSUQgKEBOZXdTdGF0ZXMpIHsKICAgIG15ICVTdGF0ZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgSUQgPT4gJE5ld1N0YXRlSUQsCiAgICApOwogICAgJFN0YXRlT2JqZWN0LT5TdGF0ZVVwZGF0ZSgKICAgICAgICAlU3RhdGUsCiAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cn0KCm15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0xJU1QnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnTmV3JywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHNbMF0sCiAgICAnVGlja2V0U2VhcmNoKCkgKExJU1Q6VGlja2V0TnVtYmVyLFN0YXRlVHlwZTpuZXcgKG5vIHZhbGlkIHN0YXRlcyBvZiBzdGF0ZSB0eXBlIG5ldyknLAopOwoKIyBhY3RpdmF0ZSBzdGF0ZXMgYWdhaW4KZm9yIG15ICROZXdTdGF0ZUlEIChATmV3U3RhdGVzKSB7CiAgICBteSAlU3RhdGUgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgICAgIElEID0+ICROZXdTdGF0ZUlELAogICAgKTsKICAgICRTdGF0ZU9iamVjdC0+U3RhdGVVcGRhdGUoCiAgICAgICAgJVN0YXRlLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwp9CgojIGNoZWNrIHJlc3BvbnNlIG9mIHRpY2tldCBzZWFyY2ggZm9yIGludmFsaWQgdGltZXN0YW1wcwpmb3IgbXkgJFNlYXJjaFBhcmFtIChxdyhBcnRpY2xlQ3JlYXRlVGltZSBUaWNrZXRDcmVhdGVUaW1lIFRpY2tldFBlbmRpbmdUaW1lKSkgewogICAgZm9yIG15ICRQYXJhbU9wdGlvbiAocXcoT2xkZXJEYXRlIE5ld2VyRGF0ZSkpIHsKICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgICRTZWFyY2hQYXJhbSAuICRQYXJhbU9wdGlvbiA9PiAnMjAwMC0wMi0zMSAwMDowMDowMCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJEVycm9yTWVzc2FnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgIFR5cGUgPT4gJ2Vycm9yJywKICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UsCiAgICAgICAgICAgICJTZWFyY2ggbm90IGV4ZWN1dGVkIGR1ZSB0byBpbnZhbGlkIHRpbWUgJzIwMDAtMDItMzEgMDA6MDA6MDAnISIsCiAgICAgICAgICAgICJUaWNrZXRTZWFyY2goKSAoSGFuZGxpbmcgaW52YWxpZCB0aW1lc3RhbXAgaW4gJyRTZWFyY2hQYXJhbSRQYXJhbU9wdGlvbicpIiwKICAgICAgICApOwogICAgfQp9CgoxOwo=
Ly8gLS0KLy8gSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaC5qcyAtIHByb3ZpZGVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBjdXN0b21lciBzZWFyY2gKLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaAogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciB0aGUgY3VzdG9tZXIgc2VhcmNoLgogKi8KSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKICAgIHZhciBCYWNrdXBEYXRhID0gewogICAgICAgIEN1c3RvbWVySW5mbzogJycsCiAgICAgICAgQ3VzdG9tZXJFbWFpbDogJycsCiAgICAgICAgQ3VzdG9tZXJLZXk6ICcnCiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEVsZW1lbnQgVGhlIGpRdWVyeSBvYmplY3Qgb2YgdGhlIGlucHV0IGZpZWxkIHdpdGggYXV0b2NvbXBsZXRlCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoJEVsZW1lbnQpIHsKCiAgICAgICAgaWYgKGlzSlF1ZXJ5T2JqZWN0KCRFbGVtZW50KSkgewoKICAgICAgICAgICAgQ29yZS5VSS5BdXRvY29tcGxldGUuSW5pdCgKICAgICAgICAgICAgICAgICRFbGVtZW50LAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKFJlcXVlc3QsIFJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIFVSTCA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRDdXN0b21lclNlYXJjaCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFRlcm06IFJlcXVlc3QudGVybSwKICAgICAgICAgICAgICAgICAgICAgICAgTWF4UmVzdWx0czogQ29yZS5VSS5BdXRvY29tcGxldGUuR2V0Q29uZmlnKCdNYXhSZXN1bHRzRGlzcGxheWVkJykKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC5kYXRhKCdBdXRvQ29tcGxldGVYSFInLCBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKFVSTCwgRGF0YSwgZnVuY3Rpb24gKFJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgRGF0YSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goUmVzdWx0LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLkN1c3RvbWVyVmFsdWUgKyAiICgiICsgdGhpcy5DdXN0b21lcktleSArICIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5DdXN0b21lclZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlKERhdGEpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoRXZlbnQsIFVJKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBDdXN0b21lcktleSA9IFVJLml0ZW0ubGFiZWwucmVwbGFjZSgvLipcKCguKilcKSQvLCAnJDEnKTsKCiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQudmFsKFVJLml0ZW0udmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaGlkZGVuIGZpZWxkIFNlbGVjdGVkQ3VzdG9tZXJVc2VyCiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigkRWxlbWVudC5hdHRyKCdpZCcpKSArICdTZWxlY3RlZCcpLnZhbChDdXN0b21lcktleSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnQ3VzdG9tZXJTZWFyY2gnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBPbiB1bmxvYWQgcmVtb3ZlIG9sZCBzZWxlY3RlZCBkYXRhLiBJZiB0aGUgcGFnZSBpcyByZWxvYWRlZCAod2l0aCBGNSkgdGhpcyBkYXRhIHN0YXlzIGluIHRoZSBmaWVsZCBhbmQgaW52b2tlcyBhbiBhamF4IHJlcXVlc3Qgb3RoZXJ3aXNlCiAgICAgICAgJCh3aW5kb3cpLmJpbmQoJ3VubG9hZCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoJEVsZW1lbnQuYXR0cignaWQnKSkgKyAnU2VsZWN0ZWQnKS52YWwoJycpOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaCB8fCB7fSkpOwo=
Ly8gLS0KLy8gSVRTTS5BZ2VudC5JbmNpZGVudFN0YXRlLmpzIC0gcHJvdmlkZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyB0byBzaG93IHRoZSBzZXJ2aWNlIGluY2lkZW50IHN0YXRlCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDE1IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIElUU00uQWdlbnQuSW5jaWRlbnRTdGF0ZQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBJbmNpZGVudFN0YXRlLgogKi8KSVRTTS5BZ2VudC5JbmNpZGVudFN0YXRlID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIFRhcmdldE5TLlNob3dJbmNpZGVudFN0YXRlID0gZnVuY3Rpb24gKERhdGEpIHsKCiAgICAgICAgRGF0YS5TdWJhY3Rpb24gPSAnR2V0U2VydmljZUluY2lkZW50U3RhdGUnOwoKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKCBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEsIGZ1bmN0aW9uIChSZXNwb25zZSkgewoKICAgICAgICAgICAgLy8gaWYgYSBzZXJ2aWNlIHdhcyBzZWxlY3RlZCBhbmQgYW4gaW5jaWRlbnQgc3RhdGUgd2FzIGZvdW5kCiAgICAgICAgICAgIGlmIChSZXNwb25zZS5DdXJJbmNpU2lnbmFsKSB7CgogICAgICAgICAgICAgICAgLy8gc2V0IGluY2lkZW50IHNpZ25hbAogICAgICAgICAgICAgICAgJCgnI1NlcnZpY2VJbmNpZGVudFN0YXRlU2lnbmFsJykuYXR0cignY2xhc3MnLCBSZXNwb25zZS5DdXJJbmNpU2lnbmFsKTsKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZVNpZ25hbCcpLmF0dHIoJ3RpdGxlJywgUmVzcG9uc2UuQ3VySW5jaVN0YXRlKTsKCiAgICAgICAgICAgICAgICAvLyBzZXQgaW5jaWRlbnQgc3RhdGUKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZScpLmh0bWwoUmVzcG9uc2UuQ3VySW5jaVN0YXRlKTsKCiAgICAgICAgICAgICAgICAvLyBzaG93IHNlcnZpY2UgaW5jaWRlbnQgc2lnbmFsIGFuZCBzdGF0ZQogICAgICAgICAgICAgICAgJCgnI1NlcnZpY2VJbmNpZGVudFN0YXRlQ29udGFpbmVyJykKICAgICAgICAgICAgICAgICAgICAuc2hvdygpCiAgICAgICAgICAgICAgICAgICAgLnByZXYoKQogICAgICAgICAgICAgICAgICAgIC5zaG93KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBoaWRlIHNlcnZpY2UgaW5jaWRlbnQgc2lnbmFsIGFuZCBzdGF0ZQogICAgICAgICAgICAgICAgJCgnI1NlcnZpY2VJbmNpZGVudFN0YXRlQ29udGFpbmVyJykKICAgICAgICAgICAgICAgICAgICAuaGlkZSgpCiAgICAgICAgICAgICAgICAgICAgLnByZXYoKQogICAgICAgICAgICAgICAgICAgIC5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuSW5jaWRlbnRTdGF0ZSB8fCB7fSkpOwo=
Ly8gLS0KLy8gSVRTTS5BZ2VudC5ab29tLmpzIC0gcHJvdmlkZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgVGlja2V0Wm9vbQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCi8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBDb3JlLklUU00uVGlja2V0Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBJVFNNLgogKi8KSVRTTS5BZ2VudC5ab29tID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoSVRTTVRhYmxlSGVpZ2h0KSB7CgogICAgICAgIENvcmUuVUkuUmVzaXphYmxlLkluaXQoJCgnI0lUU01UYWJsZUJvZHknKSwgSVRTTVRhYmxlSGVpZ2h0LCBmdW5jdGlvbiAoZXZlbnQsIHVpLCBIZWlnaHQsIFdpZHRoKSB7CgogICAgICAgICAgICAvLyByZW1lbWJlciBuZXcgaGVpZ2h0IGZvciBuZXh0IHJlbG9hZAogICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KFRhcmdldE5TLlJlc2l6ZVRpbWVPdXRTY3JvbGxlcik7CiAgICAgICAgICAgIFRhcmdldE5TLlJlc2l6ZVRpbWVPdXRTY3JvbGxlciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIENvcmUuQWdlbnQuUHJlZmVyZW5jZXNVcGRhdGUoJ1VzZXJDb25maWdJdGVtWm9vbVRhYmxlSGVpZ2h0JywgSGVpZ2h0KTsKICAgICAgICAgICAgfSwgMTAwMCk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50Llpvb20gfHwge30pKTsK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIEZsYWcKICovCgpmaWVsZHNldC5UYWJsZUxpa2UgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCiNTZXJ2aWNlSW5jaWRlbnRTdGF0ZUNvbnRhaW5lciAuRmxhZywKLlNpZGViYXJDb2x1bW4gZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBtYXJnaW4tdG9wOiA3cHg7Cn0KCnVsLklUU01GbGFnIHsKICAgIG1hcmdpbi10b3A6IDVweDsKfQoKdWwuSVRTTUZsYWcgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCi5SVEwgZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogNXB4Owp9CgouRmxhZyBzcGFuLmdyYXlsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojY2RjZGNkOwp9CgouRmxhZyBzcGFuLmdyZWVubGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM4YmVmNGQ7Cn0KCi5GbGFnIHNwYW4ueWVsbG93bGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmRkNTA7Cn0KCi5GbGFnIHNwYW4ucmVkbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmNTA1ZTsKfQoKLkZsYWcgc3Bhbi5wdXJwbGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojYjIzYWVlOwp9CgouRmxhZyBzcGFuLm9yYW5nZWxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZjhjMDA7Cn0KCi5GbGFnIHNwYW4uY3lhbmxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiM3OWNkY2Q7Cn0KCi5GbGFnIHNwYW4ud2hpdGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOwp9CgouRmxhZyBzcGFuLmJsYWNrbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsKfQoKLyoqCiAqIEBub3RlICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGZvciBhIExhYmVsIGFuZCBhIERpdiB3aXRoIGNsYXNzICdGaWVsZCcsCiAqICAgICAgICAgICB0aGF0IGFyZSBpbnNpZGUgYSBGaWVsZCBEaXYgLgogKi8KCmxhYmVsLlN1YkVsZW1lbnQgewogICAgd2lkdGg6IDQwJSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4Owp9CgpkaXYuU3ViRWxlbWVudCB7CiAgICBtYXJnaW4tbGVmdDogNDAlICFpbXBvcnRhbnQ7Cn0KCmRpdi5TdWJFbGVtZW50IGlucHV0Llc1MHBjIHsKICAgIHdpZHRoOiAzMyU7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBOb0RvdWJsZUJvcmRlcnMKICovCgouQ29udGVudC5Ob0RvdWJsZUJvcmRlcnMgewogICAgYm9yZGVyLWxlZnQ6IDAgbm9uZSAjMDAwMDAwOwogICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgIzAwMDAwMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBTdGFuZGFyZCBXaWR0aHMKICovCi5XNXBjIHsKICAgIHdpZHRoOiA1JTsKfQoKLlcxNXBjIHsKICAgIHdpZHRoOiAxNSU7Cn0KCi5XMzBwYyB7CiAgICB3aWR0aDogMzAlOwp9Cgp9LyogZW5kIG1lZGlhICovCgoK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSVRTTURldGFpbHMKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBIZWFkbGluZQogKi8KCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0cmVlCiAqLwojSVRTTVRyZWUgewogICAgbWFyZ2luLXRvcDogMjBweDsKfQoKCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0YWJsZSBib2R5CiAqLwojSVRTTVRhYmxlQm9keSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKI0lUU01UYWJsZUJvZHkgLlNjcm9sbGVyIHsKICAgIGhlaWdodDogMTQwcHg7CiAgICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgQ29udHJvbFJvdyBJY29ucwogKi8KCgouSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiByaWdodDsKfQoKLlJUTCAuSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiBsZWZ0Owp9CgoKLkNvbnRyb2xSb3cgLklUU01JdGVtVmlldy5JY29ucyAuT25lSVRTTUl0ZW0uQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLk9uZUlUU01JdGVtLkFjdGl2ZTpob3ZlciBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7Cn0KCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcyBzcGFuLAouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXM6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4Owp9CgouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXMuQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcy5BY3RpdmU6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsKfQoKLkNvbnRyb2xSb3cgLklUU01GaWx0ZXIuSWNvbnMgLkFjdGl2ZSBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgSXRlbVJvdwogKiBAbm90ZSAgICAgICAgY29udGFpbnMgcmFuZG9tIGl0ZW1zIGFuZCBpcyBwb3NpdGlvbmVkIGluIHRoZSBzaWRlYmFyCiAqLwoKLkl0ZW1Sb3cgewogICAgbWFyZ2luLWxlZnQ6IDQwJTsKfQoKLlJUTCAuSXRlbVJvdyB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogNDAlOwp9CgouSXRlbVJvdyBsaSB7CiAgICBwYWRkaW5nOiAzcHggMCA1cHggOHB4Owp9CgouUlRMIC5JdGVtUm93IGxpIHsKICAgIHBhZGRpbmc6IDNweCA4cHggNXB4IDA7Cn0KCi5JdGVtUm93IGEgewogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBjb2xvcjogIzAwMDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouSXRlbVJvdyBhOmhvdmVyIHsKICAgIGNvbG9yOiAjNjY2Owp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBJVFNNRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIENvbXBhdGliaWxpdHkgSUU3IGZvciBUaWNrZXQgWm9vbQogKi8KI0lUU01UYWJsZUJvZHkgdGFibGUgewogICAgd2lkdGg6IDk4JTsKfQoKCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgU2VhcmNoCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCgovKioKICogQHN1YnNlY3Rpb24gIEF1dG9Db21wbGV0ZQogKi8KCi51aS1hdXRvY29tcGxldGUgewogICAgei1pbmRleDogMTAwMDAwICFpbXBvcnRhbnQ7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ1NTIGZvciBwcmludGluZwogKi8KCkBtZWRpYSBwcmludCB7CgoKI0lUU01UYWJsZSB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGFibGVzCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgT3ZlcnZpZXcgU21hbGwgVmlldyBUYWJsZQogKi8KCi5UYWJsZVNtYWxsIHRoZWFkLklUU01IZWFkZXIgc3BhbiB7CiAgICBjb2xvcjogIzRBNEE0QTsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICB0YWJsZSBlbGVtZW50cyB3aXRob3V0IGhpZ2hsaWdodAogKi8KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCB7CiAgICBoZWlnaHQ6IDMwcHg7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCBpbnB1dCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRib2R5IHRyIHRkIHNlbGVjdHsKICAgIHdpZHRoOiA4NSU7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQouRGF0YVRhYmxlTm9IaWdobGlnaHQgdHIuRXZlbjpob3ZlciB0ZCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRyLkV2ZW46aG92ZXIuTGFzdCB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1Owp9CgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHIuTGFzdDpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKfQ==
IyAtLQojIElUU01Db3JlLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNSBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29yZTsgICAgIyMgbm8gY3JpdGljCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OlRlbXBsYXRlOjpQcm92aWRlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpJVFNNQ29yZS5wbSAtIGNvZGUgdG8gZXhjZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENvZGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCd2YXI6OnBhY2thZ2VzZXR1cDo6SVRTTUNvcmUnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBhbHdheXMgZGlzY2FyZCB0aGUgY29uZmlnIG9iamVjdCBiZWZvcmUgcGFja2FnZSBjb2RlIGlzIGV4ZWN1dGVkLAogICAgIyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29uZmlnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgbmV3bHksIHNvIHRoYXQgaXQKICAgICMgd2lsbCB1c2UgdGhlIHJlY2VudGx5IHdyaXR0ZW4gbmV3IGNvbmZpZyBmcm9tIHRoZSBwYWNrYWdlCiAgICAkS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoCiAgICAgICAgT2JqZWN0cyA9PiBbJ0tlcm5lbDo6Q29uZmlnJ10sCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY3JlYXRlIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ29yZQogICAgJFNlbGYtPl9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnR3JvdXAgZm9yIElUU00gU2VydmljZSBtYXNrIGFjY2VzcyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLicsCiAgICApOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzbGEgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTTEFUeXBlSUQoKTsKCiAgICAjIHNldCBwcmVmZXJlbmNlcyBmb3Igc29tZSBHZW5lcmFsQ2F0YWxvZyBlbnRyaWVzCiAgICAjIHRoaXMgaXMgb25seSBuZWNlc3NhcnkgaW4gQ29kZUluc3RhbGwKICAgICMgKEZvciBVcGdyYWRlcyB0aGlzIGlzIGRvbmUgYWxyZWFkeSBpbiB0aGUgR2VuZXJhbENhdGFsb2cgcGFja2FnZSkKICAgICRTZWxmLT5fU2V0UHJlZmVyZW5jZXMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVJlaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgcmVpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVSZWluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlUmVpbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCBDSVAgbWF0cml4CiAgICAkU2VsZi0+X0NJUERlZmF1bHRNYXRyaXhTZXQoKTsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1zZXJ2aWNlCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdpdHNtLXNlcnZpY2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBTZXJ2aWNlIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgY3JpdGljYWxpdHkgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNsYSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fM18yXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiAzLjIuOTEgKDMuMy4wIEJldGEgMSkuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzJfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fM18yXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbWlncmF0ZSB0aGUgdmFsdWVzIGZvciBDcml0aWNhbGl0eSBhbmQgdGhlIEltcGFjdCBmcm9tIEdlbmVyYWxDYXRhbG9nIHRvIER5bmFtaWNGaWVsZHMKICAgICRTZWxmLT5fTWlncmF0ZUNyaXRpY2FsaXR5QW5kSW1wYWN0VG9EeW5hbWljRmllbGRzKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfMigpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gNC4wLjIuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfMigpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfMiB7ICAgICMjIG5vIGNyaXRpYwogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG1pZ3JhdGUgdGhlIERUTCBDb250ZW50IGluIHRoZSBTeXNDb25maWcKICAgICRTZWxmLT5fTWlncmF0ZURUTEluU3lzQ29uZmlnKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBkZWZhdWx0IENJUCBtYXRyaXgKICAgICRTZWxmLT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzbGEgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTTEFUeXBlSUQoKTsKCiAgICAjIG1ha2UgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwKICAgICRTZWxmLT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24oKQoKcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBmb3IgSVRTTUNvcmUgcmVsYXRlZCBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpOwoKPWN1dAoKc3ViIF9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlZmluZSBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Db3JlCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIE9sZE5hbWUgICAgPT4gJ1RpY2tldEZyZWVUZXh0MTMnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdJVFNNQ3JpdGljYWxpdHknLAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnMSB2ZXJ5IGxvdycgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgICAgICAnMiBsb3cnICAgICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzMgbm9ybWFsJyAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgICAgICc0IGhpZ2gnICAgICAgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICAgICAgJzUgdmVyeSBoaWdoJyA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgT2xkTmFtZSAgICA9PiAnVGlja2V0RnJlZVRleHQxNCcsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0lUU01JbXBhY3QnLAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICdJbXBhY3QnLAogICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnMSB2ZXJ5IGxvdycgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgICAgICAnMiBsb3cnICAgICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzMgbm9ybWFsJyAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgICAgICc0IGhpZ2gnICAgICAgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICAgICAgJzUgdmVyeSBoaWdoJyA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQER5bmFtaWNGaWVsZHM7Cn0KCj1pdGVtIF9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpCgpjcmVhdGVzIGFsbCBkeW5hbWljIGZpZWxkcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIElUU01Db3JlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ3JlYXRlSVRTTUR5bmFtaWNGaWVsZHMoKTsKCj1jdXQKCnN1YiBfQ3JlYXRlSVRTTUR5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVmFsaWRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExvb2t1cCgKICAgICAgICBWYWxpZCA9PiAndmFsaWQnLAogICAgKTsKCiAgICAjIGdldCBhbGwgY3VycmVudCBkeW5hbWljIGZpZWxkcwogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2Ygb3JkZXIgbnVtYmVycyAoaXMgYWxyZWFkeSBzb3J0ZWQpLgogICAgbXkgQER5bmFtaWNmaWVsZE9yZGVyTGlzdDsKICAgIGZvciBteSAkRHluYW1pY2ZpZWxkICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CiAgICAgICAgcHVzaCBARHluYW1pY2ZpZWxkT3JkZXJMaXN0LCAkRHluYW1pY2ZpZWxkLT57RmllbGRPcmRlcn07CiAgICB9CgogICAgIyBnZXQgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBvcmRlciBsaXN0IGFuZCBhZGQgMQogICAgbXkgJE5leHRPcmRlck51bWJlciA9IDE7CiAgICBpZiAoQER5bmFtaWNmaWVsZE9yZGVyTGlzdCkgewogICAgICAgICROZXh0T3JkZXJOdW1iZXIgPSAkRHluYW1pY2ZpZWxkT3JkZXJMaXN0Wy0xXSArIDE7CiAgICB9CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTQogICAgbXkgQER5bmFtaWNGaWVsZHMgPSAkU2VsZi0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpOwoKICAgICMgY3JlYXRlIGEgZHluYW1pYyBmaWVsZHMgbG9va3VwIHRhYmxlCiAgICBteSAlRHluYW1pY0ZpZWxkTG9va3VwOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiByZWYgJER5bmFtaWNGaWVsZCBuZSAnSEFTSCc7CiAgICAgICAgJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgY3JlYXRlIG9yIHVwZGF0ZSBkeW5hbWljIGZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKEBEeW5hbWljRmllbGRzKSB7CgogICAgICAgIG15ICRDcmVhdGVEeW5hbWljRmllbGQ7CgogICAgICAgICMgY2hlY2sgaWYgdGhlIGR5bmFtaWMgZmllbGQgYWxyZWFkeSBleGlzdHMKICAgICAgICBpZiAoIHJlZiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRDcmVhdGVEeW5hbWljRmllbGQgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBpZiB0aGUgZmllbGQgZXhpc3RzIGNoZWNrIGlmIHRoZSB0eXBlIG1hdGNoIHdpdGggdGhlIG5lZWRlZCB0eXBlCiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0ZpZWxkVHlwZX0KICAgICAgICAgICAgbmUgJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgcmVuYW1lIHRoZSBmaWVsZCBhbmQgY3JlYXRlIGEgbmV3IG9uZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkVXBkYXRlKAogICAgICAgICAgICAgICAgJXsgJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gfSwKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e05hbWV9IC4gJ09sZCcsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDcmVhdGVEeW5hbWljRmllbGQgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgaWYgdGhlIGZpZWxkIGV4aXN0cyBhbmQgdGhlIHR5cGUgbWF0Y2gsIHVwZGF0ZSBpdCB0byB0aGUgSVRTTSBkZWZpbml0aW9uCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAleyREeW5hbWljRmllbGR9LAogICAgICAgICAgICAgICAgSUQgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0lEfSwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0tPntGaWVsZE9yZGVyfSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gJFZhbGlkSUQsCiAgICAgICAgICAgICAgICBSZW9yZGVyICAgID0+IDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIG5ldyBmaWVsZCBoYXMgdG8gYmUgY3JlYXRlZAogICAgICAgIGlmICgkQ3JlYXRlRHluYW1pY0ZpZWxkKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBhIG5ldyBmaWVsZAogICAgICAgICAgICBteSAkRmllbGRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgID0+ICREeW5hbWljRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICBGaWVsZE9yZGVyICAgID0+ICROZXh0T3JkZXJOdW1iZXIsCiAgICAgICAgICAgICAgICBGaWVsZFR5cGUgICAgID0+ICREeW5hbWljRmllbGQtPntGaWVsZFR5cGV9LAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgICA9PiAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0sCiAgICAgICAgICAgICAgICBDb25maWcgICAgICAgID0+ICREeW5hbWljRmllbGQtPntDb25maWd9LAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAkVmFsaWRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRGaWVsZElEOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgb3JkZXIgbnVtYmVyCiAgICAgICAgICAgICROZXh0T3JkZXJOdW1iZXIrKzsKICAgICAgICB9CiAgICB9CgogICAgIyBtYWtlIGR5bmFtaWMgZmllbGRzIGludGVybmFsCiAgICAkU2VsZi0+X01ha2VEeW5hbWljRmllbGRzSW50ZXJuYWwoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX01pZ3JhdGVDcml0aWNhbGl0eUFuZEltcGFjdFRvRHluYW1pY0ZpZWxkcygpCgpUaGlzIGZ1bmN0aW9uIG1pZ3JhdGVzIHRoZSB2YWx1ZXMgZm9yIENyaXRpY2FsaXR5IGFuZCB0aGUgSW1wYWN0IGZyb20gR2VuZXJhbENhdGFsb2cgdG8gRHluYW1pY0ZpZWxkcy4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01pZ3JhdGVDcml0aWNhbGl0eUFuZEltcGFjdFRvRHluYW1pY0ZpZWxkcygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlQ3JpdGljYWxpdHlBbmRJbXBhY3RUb0R5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjcml0aWNhbGl0eSBsaXN0IChvbmx5IHZhbGlkIGl0ZW1zKQogICAgbXkgJENyaXRpY2FsaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6Q3JpdGljYWxpdHknLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGltcGFjdCBsaXN0IChvbmx5IHZhbGlkIGl0ZW1zKQogICAgbXkgJEltcGFjdExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkltcGFjdCcsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBjb252ZXJ0IGluIGEgaGFzaCByZWZlcmVuY2Ugd2hlcmUga2V5IGlzIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZQogICAgJENyaXRpY2FsaXR5TGlzdCA9IHsgbWFwIHsgJF8gPT4gJF8gfSBzb3J0IHZhbHVlcyAleyRDcml0aWNhbGl0eUxpc3R9IH07CiAgICAkSW1wYWN0TGlzdCAgICAgID0geyBtYXAgeyAkXyA9PiAkXyB9IHNvcnQgdmFsdWVzICV7JEltcGFjdExpc3R9IH07CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNvcmUKICAgICMgKHRoaXMgaXMgb25seSBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QpCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICRTZWxmLT5fR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCk7CgogICAgbXkgJFN1Y2Nlc3NDb3VudGVyOwogICAgbXkgJUR5bmFtaWNGaWVsZE5hbWUySUQ7CgogICAgIyByZW5hbWUgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBDcml0aWNhbGl0eSBhbmQgSW1wYWN0IGFuZCBhZGQgcG9zc2libGUgdmFsdWUgY29uZmlndXJhdGlvbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGROZXcgKEBEeW5hbWljRmllbGRzKSB7CgogICAgICAgICMgcmVwbGFjZSB0aGUgcG9zc2libGUgdmFsdWVzIHdpdGggYWxyZWFkeSBleGlzdGluZyB2YWx1ZXMgZnJvbSBHZW5lcmFsIENhdGFsb2cKICAgICAgICBpZiAoICREeW5hbWljRmllbGROZXctPntOYW1lfSBlcSAnSVRTTUNyaXRpY2FsaXR5JyApIHsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZE5ldy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gPSAkQ3JpdGljYWxpdHlMaXN0OwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICREeW5hbWljRmllbGROZXctPntOYW1lfSBlcSAnSVRTTUltcGFjdCcgKSB7CiAgICAgICAgICAgICREeW5hbWljRmllbGROZXctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9ID0gJEltcGFjdExpc3Q7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBleGlzdGluZyBkeW5hbWljIGZpZWxkIGRhdGEKICAgICAgICBteSAkRHluYW1pY0ZpZWxkT2xkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5ldy0+e09sZE5hbWV9LAogICAgICAgICk7CgogICAgICAgICMgc3RvcmUgdGhlIGludGVybmFsIGlkIG9mIGVhY2ggZHluYW1pYyBmaWVsZCBpbiBhIGxvb2t1cCBoYXNoCiAgICAgICAgJER5bmFtaWNGaWVsZE5hbWUySUR7ICREeW5hbWljRmllbGROZXctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZE9sZC0+e0lEfTsKCiAgICAgICAgIyB1cGRhdGUgdGhlIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkVXBkYXRlKAogICAgICAgICAgICBJRCAgICAgICAgID0+ICREeW5hbWljRmllbGRPbGQtPntJRH0sCiAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gJER5bmFtaWNGaWVsZE9sZC0+e0ZpZWxkT3JkZXJ9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICREeW5hbWljRmllbGROZXctPntOYW1lfSwKICAgICAgICAgICAgTGFiZWwgICAgICA9PiAkRHluYW1pY0ZpZWxkTmV3LT57TGFiZWx9LAogICAgICAgICAgICBGaWVsZFR5cGUgID0+ICREeW5hbWljRmllbGROZXctPntGaWVsZFR5cGV9LAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICREeW5hbWljRmllbGROZXctPntPYmplY3RUeXBlfSwKICAgICAgICAgICAgQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkTmV3LT57Q29uZmlnfSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBSZW9yZGVyICAgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFN1Y2Nlc3MpIHsKICAgICAgICAgICAgJFN1Y2Nlc3NDb3VudGVyKys7CiAgICAgICAgfQogICAgfQoKICAgICMgZXJyb3IgaGFuZGxpbmcgaWYgbm90IGFsbCBkeW5hbWljIGZpZWxkcyBjb3VsZCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQogICAgaWYgKCBzY2FsYXIgQER5bmFtaWNGaWVsZHMgIT0gJFN1Y2Nlc3NDb3VudGVyICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBtaWdyYXRlIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QgZnJvbSBHZW5lcmFsIENhdGFsb2cgdG8gRHluYW1pYyBGaWVsZHMhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlR2VuZXJhbENhdGFsb2dMaXN0OwoKICAgICMgZ2V0IGNyaXRpY2FsaXR5IGxpc3QgKHZhbGlkIGFuZCBpbnZhbGlkIGl0ZW1zKQogICAgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpDcml0aWNhbGl0eScsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgIyBnZXQgaW1wYWN0IGxpc3QgKHZhbGlkIGFuZCBpbnZhbGlkIGl0ZW1zKQogICAgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNSW1wYWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW1wYWN0JywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGZpbmQgZXhpc3RpbmcgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIGNyaXRpY2FsaXR5IGFuZCBpbXBhY3QKICAgICMgd2hpY2ggaGF2ZSBiZWVuIHN0b3JlZCBhcyBpZHMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHZhbHVlcwogICAgZm9yIG15ICREeW5hbWljRmllbGROYW1lICggc29ydCBrZXlzICVHZW5lcmFsQ2F0YWxvZ0xpc3QgKSB7CgogICAgICAgIGZvciBteSAkSUQgKCBzb3J0IGtleXMgJXsgJEdlbmVyYWxDYXRhbG9nTGlzdHskRHluYW1pY0ZpZWxkTmFtZX0gfSApIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGR5bmFtaWNfZmllbGRfdmFsdWUKICAgICAgICAgICAgICAgICAgICBTRVQgdmFsdWVfdGV4dCA9ID8KICAgICAgICAgICAgICAgICAgICBXSEVSRSBmaWVsZF9pZCA9ID8KICAgICAgICAgICAgICAgICAgICBBTkQgdmFsdWVfdGV4dCA9ID8nLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCRHZW5lcmFsQ2F0YWxvZ0xpc3R7JER5bmFtaWNGaWVsZE5hbWV9LT57JElEfSwKICAgICAgICAgICAgICAgICAgICBcJER5bmFtaWNGaWVsZE5hbWUySUR7JER5bmFtaWNGaWVsZE5hbWV9LAogICAgICAgICAgICAgICAgICAgIFwkSUQsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSB0aGUgZW50cmllcyBmb3IgY3JpdGljYWxpdHkgYW5kIGltcGFjdCBmcm9tIGdlbmVyYWwgY2F0YWxvZwogICAgZm9yIG15ICRDbGFzcyAocXcoSVRTTTo6Q29yZTo6Q3JpdGljYWxpdHkgSVRTTTo6Q29yZTo6SW1wYWN0KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDbGFzcyBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIHNlcnZpY2UgdGFibGUgZnJvbSBjcml0aWNhbGl0eV9pZCB0byBjcml0aWNhbGl0eQogICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICggc29ydCBrZXlzICV7ICRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUNyaXRpY2FsaXR5fSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNlcnZpY2UKICAgICAgICAgICAgICAgIFNFVCBjcml0aWNhbGl0eSA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGNyaXRpY2FsaXR5X2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUNyaXRpY2FsaXR5fS0+eyRDcml0aWNhbGl0eUlEfSwKICAgICAgICAgICAgICAgIFwkQ3JpdGljYWxpdHlJRCwKICAgICAgICAgICAgXSwKICAgICAgICApOwogICAgfQoKICAgICMgbWlncmF0ZSBjaXBfYWxsb2NhdGUgdGFibGUgZnJvbSBjcml0aWNhbGl0eV9pZCB0byBjcml0aWNhbGl0eQogICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICggc29ydCBrZXlzICV7ICRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUNyaXRpY2FsaXR5fSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNpcF9hbGxvY2F0ZQogICAgICAgICAgICAgICAgU0VUIGNyaXRpY2FsaXR5ID0gPwogICAgICAgICAgICAgICAgV0hFUkUgY3JpdGljYWxpdHlfaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9LT57JENyaXRpY2FsaXR5SUR9LAogICAgICAgICAgICAgICAgXCRDcml0aWNhbGl0eUlELAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIGNpcF9hbGxvY2F0ZSB0YWJsZSBmcm9tIGltcGFjdF9pZCB0byBpbXBhY3QKICAgIGZvciBteSAkSW1wYWN0SUQgKCBzb3J0IGtleXMgJXsgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNSW1wYWN0fSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNpcF9hbGxvY2F0ZQogICAgICAgICAgICAgICAgU0VUIGltcGFjdCA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGltcGFjdF9pZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkR2VuZXJhbENhdGFsb2dMaXN0e0lUU01JbXBhY3R9LT57JEltcGFjdElEfSwKICAgICAgICAgICAgICAgIFwkSW1wYWN0SUQsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRyb3AgbWlncmF0ZWQgY29sdW1ucwogICAgbXkgQERyb3AgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+U1FMUHJvY2Vzc29yKAogICAgICAgIERhdGFiYXNlID0+IFsKCiAgICAgICAgICAgICMgZHJvcCBjb2x1bW4gY3JpdGljYWxpdHlfaWQgZnJvbSBzZXJ2aWNlIHRhYmxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnc2VydmljZScsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ0NvbHVtbkRyb3AnLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY3JpdGljYWxpdHlfaWQnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ0VuZCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIGRyb3AgY29sdW1uIGNyaXRpY2FsaXR5X2lkIGZyb20gY2lwX2FsbG9jYXRlIHRhYmxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY2lwX2FsbG9jYXRlJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdjcml0aWNhbGl0eV9pZCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgZHJvcCBjb2x1bW4gaW1wYWN0X2lkIGZyb20gY2lwX2FsbG9jYXRlIHRhYmxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY2lwX2FsbG9jYXRlJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdpbXBhY3RfaWQnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ0VuZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICk7CgogICAgZm9yIG15ICRTUUwgKEBEcm9wKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfU2V0UHJlZmVyZW5jZXMoKQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X1NldFByZWZlcmVuY2VzKCkKCj1jdXQKCnN1YiBfU2V0UHJlZmVyZW5jZXMgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICBteSAlTWFwID0gKAogICAgICAgIE9wZXJhdGlvbmFsID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgV2FybmluZyAgICAgPT4gJ3dhcm5pbmcnLAogICAgICAgIEluY2lkZW50ICAgID0+ICdpbmNpZGVudCcsCiAgICApOwoKICAgIE5BTUU6CiAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJU1hcCApIHsKCiAgICAgICAgbXkgJEl0ZW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgTmFtZSAgPT4gJE5hbWUsCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICApOwoKICAgICAgICBuZXh0IE5BTUUgaWYgISRJdGVtOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtLT57SXRlbUlEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICdGdW5jdGlvbmFsaXR5JywKICAgICAgICAgICAgVmFsdWUgID0+ICRNYXB7JE5hbWV9LAogICAgICAgICk7CiAgICB9Cn0KCj1pdGVtIF9DSVBEZWZhdWx0TWF0cml4U2V0KCkKCnNldCB0aGUgZGVmYXVsdCBDSVAgbWF0cml4CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKPWN1dAoKc3ViIF9DSVBEZWZhdWx0TWF0cml4U2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QKICAgIG15ICRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpLT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJExpc3Q7CiAgICByZXR1cm4gaWYgcmVmICRMaXN0IG5lICdIQVNIJzsKCiAgICAjIHNldCBubyBtYXRyaXggaWYgYWxyZWFkeSBkZWZpbmVkCiAgICByZXR1cm4gaWYgJXskTGlzdH07CgogICAgIyBkZWZpbmUgdGhlIGFsbG9jYXRpb25zCiAgICBteSAlQWxsb2NhdGlvbjsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnMSB2ZXJ5IGxvdyd9ICAgPSAnMSB2ZXJ5IGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzIgbG93J30gICAgICAgID0gJzEgdmVyeSBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eyczIG5vcm1hbCd9ICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzQgaGlnaCd9ICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnNSB2ZXJ5IGhpZ2gnfSAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMSB2ZXJ5IGxvdyd9ICAgICAgICA9ICcxIHZlcnkgbG93JzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzIgbG93J30gICAgICAgICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMyBub3JtYWwnfSAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eyc0IGhpZ2gnfSAgICAgICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzUgdmVyeSBoaWdoJ30gICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzEgdmVyeSBsb3cnfSAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnMiBsb3cnfSAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eyczIG5vcm1hbCd9ICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzQgaGlnaCd9ICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzUgdmVyeSBoaWdoJ30gICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eycxIHZlcnkgbG93J30gICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzIgbG93J30gICAgICAgICAgICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnMyBub3JtYWwnfSAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnNCBoaWdoJ30gICAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICAgID0gJzUgdmVyeSBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzEgdmVyeSBsb3cnfSAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMiBsb3cnfSAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMyBub3JtYWwnfSAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnNCBoaWdoJ30gICAgICA9ICc1IHZlcnkgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyc1IHZlcnkgaGlnaCd9ID0gJzUgdmVyeSBoaWdoJzsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgICAgICBJVFNNSW1wYWN0ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICBteSAlQ3JpdGljYWxpdHlMaXN0ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiAgICAjIGdldCB0aGUgaW1wYWN0IGxpc3QKICAgIG15ICVJbXBhY3RMaXN0ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01JbXBhY3R9IH07CgogICAgIyBnZXQgcHJpb3JpdHkgbGlzdAogICAgbXkgJVByaW9yaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpLT5Qcmlvcml0eUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVByaW9yaXR5TGlzdFJldmVyc2UgPSByZXZlcnNlICVQcmlvcml0eUxpc3Q7CgogICAgIyBjcmVhdGUgdGhlIGFsbG9jYXRpb24gbWF0cml4CiAgICBteSAlQWxsb2NhdGlvbk1hdHJpeDsKICAgIElNUEFDVDoKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICVBbGxvY2F0aW9uICkgewoKICAgICAgICBuZXh0IElNUEFDVCBpZiAhJEltcGFjdExpc3R7JEltcGFjdH07CgogICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJEFsbG9jYXRpb257JEltcGFjdH0gfSApIHsKCiAgICAgICAgICAgIG5leHQgQ1JJVElDQUxJVFkgaWYgISRDcml0aWNhbGl0eUxpc3R7JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICMgZXh0cmFjdCBwcmlvcml0eQogICAgICAgICAgICBteSAkUHJpb3JpdHkgPSAkQWxsb2NhdGlvbnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CgogICAgICAgICAgICBuZXh0IENSSVRJQ0FMSVRZIGlmICEkUHJpb3JpdHlMaXN0UmV2ZXJzZXskUHJpb3JpdHl9OwoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5IGlkCiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFByaW9yaXR5TGlzdFJldmVyc2V7JFByaW9yaXR5fTsKCiAgICAgICAgICAgICRBbGxvY2F0aW9uTWF0cml4eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSA9ICRQcmlvcml0eUlEOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNhdmUgdGhlIG1hdHJpeAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpLT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gXCVBbGxvY2F0aW9uTWF0cml4LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwQWRkKCkKCmFkZCBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGhlIGdyb3VwIGRlc2NyaXB0aW9uLicsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIERlc2NyaXB0aW9uKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBsaXN0IG9mIGFsbCBncm91cHMKICAgIG15ICVHcm91cExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMaXN0KCk7CgogICAgIyByZXZlcnNlIHRoZSBncm91cCBsaXN0IGZvciBlYXNpZXIgbG9va3VwCiAgICBteSAlR3JvdXBMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJUdyb3VwTGlzdDsKCiAgICAjIGNoZWNrIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzCiAgICBteSAkR3JvdXBJRCA9ICRHcm91cExpc3RSZXZlcnNleyAkUGFyYW17TmFtZX0gfTsKCiAgICAjIHJlYWN0aXZhdGUgdGhlIGdyb3VwCiAgICBpZiAoJEdyb3VwSUQpIHsKCiAgICAgICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICAgICAgbXkgJUdyb3VwRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEdldCgKICAgICAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJlYWN0aXZhdGUgZ3JvdXAKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBVcGRhdGUoCiAgICAgICAgICAgICVHcm91cERhdGEsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBhZGQgdGhlIGdyb3VwCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9va3VwIHRoZSBuZXcgZ3JvdXAgaWQKICAgIG15ICROZXdHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgYWRkIHVzZXIgcm9vdCB0byB0aGUgZ3JvdXAKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckFkZCgKICAgICAgICBHSUQgICAgICAgID0+ICROZXdHcm91cElELAogICAgICAgIFVJRCAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgcm8gICAgICAgID0+IDEsCiAgICAgICAgICAgIG1vdmVfaW50byA9PiAxLAogICAgICAgICAgICBjcmVhdGUgICAgPT4gMSwKICAgICAgICAgICAgb3duZXIgICAgID0+IDEsCiAgICAgICAgICAgIHByaW9yaXR5ICA9PiAxLAogICAgICAgICAgICBydyAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwRGVhY3RpdmF0ZSgpCgpkZWFjdGl2YXRlIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBEZWFjdGl2YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9va3VwIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCA9PiAkUGFyYW17TmFtZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICBteSAlR3JvdXBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwR2V0KAogICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIGdyb3VwCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBVcGRhdGUoCiAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle2ludmFsaWR9LAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKQoKZmlsbHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIHR5cGVfaWQgY29sdW1uIG9mIHRoZSBzZXJ2aWNlIHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UgdHlwZSBsaXN0CiAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJFNlcnZpY2VUeXBlTGlzdCB8fCByZWYgJFNlcnZpY2VUeXBlTGlzdCBuZSAnSEFTSCcgfHwgISV7JFNlcnZpY2VUeXBlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpTZXJ2aWNlOjpUeXBlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzb3J0IGlkcwogICAgbXkgQFNlcnZpY2VUeXBlS2V5TGlzdCA9IHNvcnQga2V5cyAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKICAgICMgdXBkYXRlIHR5cGVfaWQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2VydmljZQogICAgICAgICAgICBTRVQgdHlwZV9pZCA9ID8KICAgICAgICAgICAgV0hFUkUgdHlwZV9pZCA9IDAKICAgICAgICAgICAgT1IgdHlwZV9pZCBJUyBOVUxMIiwKICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlVHlwZUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpCgpmaWxsdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgY3JpdGljYWxpdHkgY29sdW1uIG9mIHRoZSBzZXJ2aWNlIHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWZ9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgIG15IEBDcml0aWNhbGl0eUtleUxpc3QgPSBzb3J0IGtleXMgJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBpZiAoICFAQ3JpdGljYWxpdHlLZXlMaXN0ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgZmluZCBhbnkgcG9zc2libGUgdmFsdWVzIGZvciBJVFNNQ3JpdGljYWxpdHkgaW4gZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB1cGRhdGUgY3JpdGljYWxpdHkgd2l0aCB0aGUgZmlyc3QgY3JpdGljYWxpdHkgZW50cnkKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2VydmljZQogICAgICAgICAgICBTRVQgY3JpdGljYWxpdHkgPSA/CiAgICAgICAgICAgIFdIRVJFIGNyaXRpY2FsaXR5ID0gJycKICAgICAgICAgICAgT1IgY3JpdGljYWxpdHkgSVMgTlVMTCIsCiAgICAgICAgQmluZCA9PiBbIFwkQ3JpdGljYWxpdHlLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aXRlbSBfRmlsbHVwRW1wdHlTTEFUeXBlSUQoKQoKZmlsbHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIHR5cGVfaWQgY29sdW1uIG9mIHRoZSBzbGEgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eVNMQVR5cGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNsYSB0eXBlIGxpc3QKICAgIG15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJFNMQVR5cGVMaXN0IHx8IHJlZiAkU0xBVHlwZUxpc3QgbmUgJ0hBU0gnIHx8ICEleyRTTEFUeXBlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpTTEE6OlR5cGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNvcnQgaWRzCiAgICBteSBAU0xBVHlwZUtleUxpc3QgPSBzb3J0IGtleXMgJXskU0xBVHlwZUxpc3R9OwoKICAgICMgdXBkYXRlIHR5cGVfaWQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2xhCiAgICAgICAgICAgIFNFVCB0eXBlX2lkID0gPwogICAgICAgICAgICBXSEVSRSB0eXBlX2lkID0gMAogICAgICAgICAgICBPUiB0eXBlX2lkIElTIE5VTEwiLAogICAgICAgIEJpbmQgPT4gWyBcJFNMQVR5cGVLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aXRlbSBfTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpCgpDb252ZXJ0cyB0aGUgZHluYW1pYyBmaWVsZHMgdG8gaW50ZXJuYWwgZmllbGRzLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgY2FuIG5vdCBiZSBkZWxldGVkIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKPWN1dAoKc3ViIF9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTQogICAgbXkgQER5bmFtaWNGaWVsZHMgPSAkU2VsZi0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpOwoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkIChARHluYW1pY0ZpZWxkcykgewoKICAgICAgICAjIHNldCBhcyBpbnRlcm5hbCBmaWVsZAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgZHluYW1pY19maWVsZAogICAgICAgICAgICAgICAgU0VUIGludGVybmFsX2ZpZWxkID0gMQogICAgICAgICAgICAgICAgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTWlncmF0ZURUTEluU3lzQ29uZmlnKCkKCkNvbnZlcnRzIERUTCBzZXR0aW5ncyBpbiBzeXNjb25maWcgdG8gVFQuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWlncmF0ZURUTEluU3lzQ29uZmlnKCk7Cgo9Y3V0CgpzdWIgX01pZ3JhdGVEVExJblN5c0NvbmZpZyB7CgogICAgIyBjcmVhdGUgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKICAgIG15ICRQcm92aWRlck9iamVjdCAgPSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyLT5uZXcoKTsKCiAgICBOQU1FOgogICAgZm9yIG15ICROYW1lIChxdyhJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUgSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUpKSB7CgogICAgICAgICMgZ2V0IHNldHRpbmcncyBjb250ZW50CiAgICAgICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJE5hbWUpOwogICAgICAgIG5leHQgTkFNRSBpZiAhJFNldHRpbmc7CgogICAgICAgIE1FTlVNT0RVTEU6CiAgICAgICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAgICAgU0VUVElOR0lURU06CiAgICAgICAgICAgIGZvciBteSAkU2V0dGluZ0l0ZW0gKCBzb3J0IGtleXMgJXsgJFNldHRpbmctPnskTWVudU1vZHVsZX0gfSApIHsKCiAgICAgICAgICAgICAgICBteSAkU2V0dGluZ0NvbnRlbnQgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eyRTZXR0aW5nSXRlbX07CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGZvciBtaWdyYXRpbmcKICAgICAgICAgICAgICAgIG5leHQgU0VUVElOR0lURU0gaWYgISRTZXR0aW5nQ29udGVudDsKCiAgICAgICAgICAgICAgICBteSAkVFRDb250ZW50OwogICAgICAgICAgICAgICAgZXZhbCB7CiAgICAgICAgICAgICAgICAgICAgJFRUQ29udGVudCA9ICRQcm92aWRlck9iamVjdC0+TWlncmF0ZURUTHRvVFQoIENvbnRlbnQgPT4gJFNldHRpbmdDb250ZW50ICk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgaWYgKCRAKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkTWVudU1vZHVsZS0+JFNldHRpbmdJdGVtIDogJEAhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnskU2V0dGluZ0l0ZW19ID0gJFRUQ29udGVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGNvbmZpZyBpdGVtCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRTZXR0aW5nLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
ITSM::Core::IncidentState
Operational
1
current_timestamp
1
current_timestamp
1
ITSM::Core::IncidentState
Warning
1
current_timestamp
1
current_timestamp
1
ITSM::Core::IncidentState
Incident
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
End User Service
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Front End
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Back End
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
IT Management
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Reporting
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
IT Operational
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Demonstration
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Project
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Training
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Underpinning Contract
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Availability
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Response Time
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Recovery Time
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Resolution Rate
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Transactions
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Errors
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Other
1
current_timestamp
1
current_timestamp
1