ITSMCore
6.0.2
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 6 patch level 2.
Build for OTRS::ITSM 6.
Build for OTRS::ITSM 6 rc1.
Build for OTRS::ITSM 6 beta3.
Build for OTRS::ITSM 6 beta2.
Build for OTRS::ITSM 6 beta1.
The OTRS::ITSM Core package.
Das OTRS::ITSM Core Paket.
Az OTRS::ITSM alapcsomag.
6.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 6.0.2</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 6.0.2</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 6.0.2</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMCore OTRS csomag telepítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>GeneralCatalog 6.0.2</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>FIGYELMEZTETÉS</strong>
<br/>
<br/>
Annak érdekében, hogy hozzáférést adjon a felhasználók számára a szolgáltatás menühöz, hozzá kell adnia őket az „itsm-service” csoporthoz tagként.
<br/>
<br/>
Azok a menüpontok, amelyeket ez a csomag adott hozzá, azután lesznek láthatóak, miután ismét bejelentkezik a rendszerbe.
<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>FIGYELEM</strong>
<br/>
<br/>
Ha eltávolítja ezt a csomagot, akkor a telepítés során létrehozott összes adatbázistábla törlésre kerül.
Az ezekben a táblákban lévő összes adat visszavonhatatlanul el fog veszni!
<br/>
<br/>
A csomagtelepítés során létrehozott „itsm-service” csoport ki lesz kapcsolva.
Ezt a csoportot az adminisztrációs területen tudja ismét bekapcsolni.
<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 6.0.2</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 6.0.2</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 6.0.2</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMCore OTRS csomag frissítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>GeneralCatalog 6.0.2</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};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_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)->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();
2017-11-28 17:17:50
opms.otrs.com
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+g5phDg1GMjRIDrIlrsiWMuqXIznRa9xKohIlwEsuAJAZdDb0zUf4mrnlNAOG7oOdXdUhP7BZsqgs9yiAO7Qrrx4dMfHwfO4Ff1jcvHKP5ckXycgGYV10dhWuZYvz64E0s/2Kj6iTAZDpJ0o2NIJab5R/8lgweZ+jOxH+qX1+Be+ov70jrsD9sOPHigdj4P4/Ki2Gzi7pCzKpjLvdN/2jlSecIiXMryr1SG6+V2MDrTSykjXQaSh6xKRZg8V4XUYC9/MWemM6jqF/m3L+Pf/FDuERbcEhZqS1gQYMzQyCGAQ0YM8hUECDnEcUZvIIDMhRiRscsAJS7W3r2mZDmVf0+y9jRp5bGliwHUpswFuM6UApqZ4vpSGSCEsZFqOqUO91Czts6iOJTxRIdIUh1/8Kgmpe9d4ljl6nJShPxxoiL0nxYesqTzOI6eE04MKznzYmcZ91f3Im5W9Fwk94EMF6fagbsliL/8xV9iUSCIXUaD2xKEAgSCrjfCKoTdph1+FkMUPI278RyraUwtP1S6+uqmF7c1iv3DwbIQ1+g8djj1uUvqJNZppFL29DAZrJ18d4GLihyftEWEQ7ffFTWNiCdPOmNjaLznmeGmnvvM8b+znB6qRODwQU0n9ZXBaCypzxtmk3oT3ERbcxNT08p+uGnnacdNz54tN1luOhmMlpteHDf9+ftvipbeByJJSmQG1paXMBthxyAbqRDzmM6ePTamipG8EcEAs2YeZSCXk3yubaZJmYOayS7iwKX7cMUtfB0RRMGZU5hZo4b8XVhgPuDbRMYP/kwOflD8LUMdXz+WUvAl/pJUxjLSEVzltbULhdxlyYSqs/LFVH1WzNLWs6OqLlqvVrFMksnTG4lxV9FKxiJV37AxV7v1vTMblS0LtXJ0ZpPaO9rGm7Gee4zFqocvKHMj7hQ+J7N7ccSjTyxKYVMpNOumSSbllQtunflIxWLRhX7RSvpEHUqftUpuMY+6xMOdHwT1Hg53WV0+SzDbhjCKlyKYFDL746x+Fq1jX69Py8fj5P59/mZD3Ww7LNTXIfSX03UyWEZhNAg6rsUqCjbLKF7d+7P6iugaJCsxkx1XYqaTUv2/L+L7eBG12TFTbRXOnnY2REdtZolOLHO3icQzHBPv8NEBEM/wyrsI8lo/uNMoNuVuP0yNNakyAywKR+tl8GRcLyAd7ZUtJP66zIk/70xFKkxijvypbKYzX6q/17IXbex49mTOV5ZB+4GfbrpRbs6fsJ25n7RB92mYTpJZVB4bjd1ViFK9AGcW+3ro0d+TxY/Fz7eEn4tkzecp+E3NbGe5UviTpqafu/KTwx3GbeRipwO5mFDjcjEhmVzsAkhHFJqXi5s26Ry5GCPged+UXBwIKxVbqdhKxVYqtlKxlYqtVNyBVGyuDlYotkKxFYqtUGyFYisUW6HLCsVdAGfph5PUV8wzlenED2f+XE92LI4sjqxg/I0Jxm7rcxegM8Lc5HELkGU7jF0tGSOtto4oAdyoZNymUWdtMWbtGlCb4zLgdpFZn5KJZ/5qIoIgmqmAtBqx1YitRmw1YqsRW43YasRWI7YasdWIrUZsNeKXrxH3KA9P/YVVtqyyZbcSW2XY4uc7x4+/XOnx20LHQsdC5zLorGI/iu24Y8FjwdMkb5Mildnifm/gmVctEFn0WPRcI3qmGzvwWOhY6FwEnXsRLuzAY9Fj0dMcPXbgsdCxezCvcA9m/fnTvPU+TEJHCJvch6kdQADdMdL7LxFW7gD1Xv5x0//+9PH391Es7TVXpq+5KoSgscOm7e1Wpm+38trfboWye58YwNTBRm+3gtntVtldVpAhPuYceFT5RhADxrnRy63KG1lyywwCXnZjFQdOjSnX16/qUh3g1plywPG2pdTh9more7VVV+xQkaag1vd0esDFhI9cCojjMYPEsHOkoEE8NtYn1EOeOeasqeM+05Z/SgVLEbwXqQiihU1eDCcvVXFpk5jrvaKz9R2diHpqYEUj7gLHabr19Lwr+BwA1Wif3dHpccJdb6ydM4eN1CgPXe4ZzGMqm3lsyhhADuQjDwFeY+pyQBF19S2drkNOm3qA6ERGNR4SgjG1uYzNZTojiZPXdKLW93Qq1CKT9/c6SP/+FeHs969Q8QQbEQcgZvJazkKbSoZLzVPwXCtd31N2+ve2hzad37555g2bXRFCl7dvPjFJGKrI0BroEcfs3hncq6jXSZsK7zTKft89eH5XM33R11GpnYKr9ZWfavxwTZ5HSp3sPFKsJgU7cKkUEBoFV6FNJbDB9Qaqyl4tpA5sLKTMQAr2Cyl6JZCigF4bpChgtZA6sLGQMgMp3C+kWBcpIDefArr7KaCaMhlPAflJ9dmrN9C1rIXUgY2FlBlI8X4h5VwhpCgG7OVDSteyDlKHNhZSRiCFOx+l/hMFmyots/VBXQ4xDCgIOOdYQ8ohHI+z5VjlEhCnqV99WsAZqCI1oHFQ45bLcD4RcRw9ntDBcMuiJ3VyGGwK5mcXtcIh61ZyOxXJvItIJn1EMj6IZNJLJJO6SCY2kvuM5KqF8NY7ZBgBjqZHk1Px3IcLMMJszDwVzm5GyS7EV7ACvk5Urw9+8Oc/fmer36j31e+SYDS28F08z8sufHdHS7j1/hyqgiAb7Ezuzdk6wYBsiYmTzCe/Cl5SJPBZppPdD9EtQ/XBUGVxaSnqGimq9a4cgoCW+41mTrkPkmdOlAKGtMfryJsW+c7BySzfOmj5qQ9+KglKS08vmZ5OSBQYt8+iDK+xslyiUAyVSRRqdMyXWU1LFIWGlRg4jVtuJQoD+9vwVWzBoSPiAjXS5lLb198u4JB6A1VjchoJwPMKVnYpppulGOdwKcbrdXETv/wtOGpY8EbYuzZI4ZrtAqpdLi1YWUh1Ayn2VSHFrgNSBOqNolc1SsHT+0RzSB1aWUgZgRRCXWOqSmJpvfsGceCwEULA5Drr1gkELmTjJ4/0ChSW70xNUaRX+F0RNX6WREkAWj3lGuVet4OTbQCizshzAUeu2RNudo4wxuO9p57jWlKypFQViZaYrpGYOjhyS2UrUIUDAxgRxygzbT0RQDDRJ3BRFYFEe3Y9cgUJ04dPf3x8+1afxDVwvrujLKjjUUoJ9SjkiHqueZqqiEvLU9fIU14nPMWyYUsflWWap1gWeZwRR6VQHCCEtGfqOcieFfhil8tdh3C9ooggZOpf3AtHlcWk5agr5CgCu+AoruOBq+HSOEfxPPL0b/4JA8xj2q/D4BWcZoohct9A/gZTO9/rg6RKg9KS1Fclqfx5IDYyfvcqf6L+LmKxfPfq/1u6Nm/8zAAA
iVBORw0KGgoAAAANSUhEUgAABh4AAAQzCAIAAAATmsFNAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeVxU9f7H8TMzMLKM7JtsAu56gVxRTMu85ZZ7Zemt/NnD602veb334W3RzKyr2aJl137dq/UrLcs9N0i7aoUiLvgQQhBFAVkFBBzZhtl+f5zuNA0wDIiz0Ov5R4+Z71m+3zOkHt7z+X6PRK/XCwAAAAAAAEDbOdl6AAAAALCISqUqLCx0cnLq3r27rccCAADwM6mtBwAAAACL6PV6nU5HyTkAALArREsAAACOQQyVJBKJrQcCAADwC6IlAAAAx0C9EgAAsEOstQQAAGApvV5fW1srCIJCobBJ7wJVSwAAwM5QtQQAAGApnU5XUlJSUlJik96JlgAAgB0iWgIAALCUbaekES0BAAA7xIQ4AACAtrFVuOPs7Ozp6SmXy23SOwAAQLOIlgAAACxl27ohFxcXFxcXm3QNAADQEibEAQAAWIpntAEAAJggWgIAALAUqx0BAACYIFoCAABoG6IlAAAAA6IlAAAASzEhDgAAwATREgAAgKWYEAcAAGCCaAkAAKBtiJYAAAAMiJYAAAAsRdUSAACACaIlAAAAS7HWEgAAgAknWw8AAADAwdiqaqmsrOz27du+vr4+Pj42GQAAAEBTVC0BAABYyrYT4piOBwAA7BBVSwAAAJay7YQ4Pz8/Hx8fmUxmwzEAAACYIFoCAACwlG3rhmQyGbkSAACwN0yIAwAAaBumpAEAABgQLQEAAFiK1Y4AAABMEC0BAABYyrZrLQEAANghoiUAAABLUbUEAABggmW8AQAALNWlSxdPT08XFxdbDwQAAMBeSKjrBgAAAAAAQPswIQ4AAAAAAADtxIQ4AAAAx1BdXa3X6z08PGQyma3HAgAA8DOiJQAAAMdw69YtnU7n7u5OtAQAAOwHE+IAAAAcg7hEplTK/RsAALAj3JoAAAA4BjFakkgkth4IAADAL4iWAAAAHIBOpxNfEC0BAAC7QrQEAADgAMSSJYEJcQAAwM5wawIAAOAAmA0HAADsE0+IAwAAsNTNmzdramr8/Pw8PT2t3LU4IY5oCQAA2BuqlgAAACyl0+l0Op1hbpo1UbUEAADsE1VLAAAAlgoICPDz85PJZNbvWoyWWGgJAADYG6IlAAAAS8lkMpvkSgIT4gAAgL3iiy8AAAAHwIQ4AABgn4iWAAAAHAAT4gAAgH3i7gQAAMABMCEOAADYJ6IlAAAAB8CEOAAAYJ+IlgAAABwAE+IAAIB94u4EAADAATAhDgAA2CeiJQAAAAdA1RIAALBPTrYeAAAAgMO4c+eOTqdTKBQymczKXbPWEgAAsE9ESwAAAJaqqKjQaDRdunSxfrTEhDgAAGCfqKkGAACwlA1Lh6haAgAA9omqJQAAgLaxSb6jUCjkcrmrq6v1uwYAADCDaAkAAMBSYumQTbi7u7u7u9uqdwAAgJYwIQ4AAMBSzEoDAAAwQbQEAABgKaIlAAAAE0RLAAAAFjHMhiNaAgAAMCBaAgAAsAjREgAAQFNESwAAAG1DtAQAAGBAtAQAAGARqpYAAACaIloCAACwCGt4AwAANEW0BAAAYBHbRktqtVqn09mkawAAADOIlgAAACxiw2hJo9Hk5eVdv37d+l0DAACYR7QEAABgERtGS2K9EnPxAACAHXKy9QAAAAAcgw2jJblc3qtXL+v3CwAA0CqqlgAAACzCMt4AAABNES0BAABYRIyWAAAAYIxoCQAAwCJULQEAADRFtAQAAGARoiUAAICmiJYAAAAsQrQEAADQFE+IAwAAsIhcLvf29nZ2drb1QAAAAOyIhAUpAQAAAAAA0D5MiAMAAAAAAEA7MSEOAADA3imVSpVKpVAoXF1dbT0WAACAX6FqCQAAwN7V1tZWV1erVCpbDwQAAMAU0RIAAIC90+l0giBIpdy5AQAAu8MNCgAAgL0jWgIAAHaLGxQAAAB7Jz7Sl2gJAADYIW5QAAAA7B1VSwAAwG5xgwIAAGARvV6v0+nEAiIrE6MliURi/a4BAADMc7L1AAAAABxDWVmZUqn09fX18fGxctdULQEAALvFDQoAAIBFxHol65cO6fV61loCAAB2i6olAAAAiwQEBAQEBFg/WhJLlgSiJQAAYJeIlgAAACxiq2THMBuOtZYAAIAd4rsvAAAAu8ZCSwAAwJ5xjwIAAGDXtFqtQLQEAADsFfcoAAAAdo2qJQAAYM+4RwEAALBrREsAAMCecY8CAABg14iWAACAPeMeBQAAwK4RLQEAAHvGPQoAAIBdE6MlmUxm64EAAAA0w8nWAwAAAHAMlZWVOp3Oy8vLycmqd1BULQEAAHvGPQoAAIBFqqurq6qqtFqtlfslWgIAAPaMexQAAACL6PV6QRAkEomV+xXDLKIlAABgn5gQBwAAYBFbRUs+Pj6enp4uLi5W7hcAAMASREsAAAAWsVW05OrqauUeAQAALEdlNQAAQOvEXEmwRbQEAABgz4iWAAAA2oBoCQAAwBjREgAAQOuoWgIAAGgW0RIAAEDriJYAAACaRbQEAADQOlut4Q0AAGDniJYAAABaR7QEAADQLKIlAACA1ul0OoFoCQAAoAmiJQAAgNbZqmpJq9XW19c3NjZauV8AAAALES0BAAC0ToyWpFJr3zvV1dUVFhaWlZVZuV8AAAALES0BAAC0zlZVSxKJpEuXLnK53Mr9AgAAWMjJ1gMAAABwALZaa0mhUCgUCit3CgAAYDmqlgAAAFrHE+IAAACaRbQEAADQOluttQQAAGDnuD0CAABona0mxAEAANg5oiUAAIDWMSEOAACgWURLAAAArWNCHAAAQLN4QhwAAEDr3NzcZDKZXC639UAAAADsi0T8Cg4AAAAAAOBeWLVqlcl/LTxKp9OlpqZmZGSUlZWpVKouXbr4+flFREQMGDAgKCioaReCIMTFxU2YMKHp2RISEs6ePWuys4FGo0lLS7ty5UpJSUldXZ1MJvPx8endu/ewYcPc3d0tHPBvFlVLAAAAAADA7jQ2Nm7btq2goMDQUl9fX1BQUFBQkJSU1FJElZ6e/vDDDzs5/SruUKvV6enpLXVUWFi4a9eu27dvG1o0Gk1JSUlJScnp06cnTpx433333e3FdGpESwAAAHZKp9MVFhbKZLLg4GBWEAcAdA5NI6GWqpmOHj1aUFDg7u4+ZsyYXr16KRQKtVpdUVGRm5ubkZHR7MlDQkKKiooyMzNjYmKM2zMzMxsaGsStJocUFhZ+9tlnGo0mODg4Li6ue/fuCoVCo9FUVlZeuXLl3Llz33zzDdGSeURLAAAAdkqr1apUKolEQq4EAPgNunTpkiAIM2bM6NGjh9gik8lCQ0NDQ0NHjRrV7CGDBg0qKipKTU01iZYuXLggCMLgwYNNoiWtVrt7926NRjNkyJCJEycantfh5OQUHBwcHBwcHx+fkJDQ4ZfWyRAtAQAA2CmtVisIgkwms/VAAACwgTt37giCEBYWZvkh0dHRR44cyc/Pr6io8PPzExsrKiry8/Plcvnvfve7AwcOGO+fnp5eXV0dFBRknCsZk8vl06ZNM24pKChITk4uKCior693dXUNDw+Pj48PDQ013keswHrttddSU1MvXLhQUVGhVqtfe+01cWtVVVVycvK1a9eUSqWTk1O3bt3i4uL69u1r+WXaG6IlAAAAO6XT6QRBaPZOFwCATq9r1663b9/Oycnp37+/hYeI+dGFCxcuXLjwyCOPiI1iyVJ0dHTTJ71mZ2cLgjB8+HAL/7U9d+5cQkKC4XloNTU1mZmZWVlZjz766ODBg012Pnz48Pnz500ar127tmPHjsbGRvGtRqPJzc3Nzc0dPXr0Qw89ZOFl2huiJQAAADslRktULQEAfptiYmKSkpL27t177dq1Pn36hISEWPKwtsGDB1+4cCEtLW3s2LEymUyr1V68eFEQhEGDBjXduaSkRBCE7t27WzKe0tLSxMREvV4/cODA+++/38vLq7q6Oikp6eLFiwkJCWFhYQEBAcb7p6amxsfHDxo0yMfHR4yulErlzp07Gxsbo6Oj4+PjfX196+vrL126dOLEiR9//LFHjx4WjsTeEC0BAADYKXFCHFVLAIDfpgcffFCpVKalpaWmpqampgqC4OHhERERERsba1h9qamQkJDAwMCbN29evnx5wIABly9frqurCwoKCgkJabpzbW2tIAhdu3a1ZDxnzpzR6XS9e/eeOnWq2OLr6ztt2rSampqcnJyUlJQpU6YY7z906FBD5ZQoJSVFpVLFxsZOnz5dbJHL5fHx8TKZLDEx8ezZsw4aLXGnAgAA0DqNRqNWqw0F8NZB1RIA4LdMJpNNnz79+eefHzVqVHh4uFwuVyqV6enp27Zt27lzp/gFTLPEuWniPDgxk2o6W60d8vPzBUG4//77TdrFNcXz8vJM2ocMGWLSkpOTIwhCXFycSfuAAQMEQSgoKLj7QdoEVUsAAACtKywsVKvVoaGhrq6uVuuUqiUAAAIDAwMDAwVB0Ov1N2/ezMzMTElJyczM9PPza2lxopiYmO++++769evXr1/Pzc11dnaOjo5udk93d/fbt2/fuXPH29u71ZEolUpBEPz9/U3axXlw4qLjxpqes6qqShCELVu2iJdjaBdfiyVUjog7FQAAgNZJJBKpVGrllIeqJQAADCQSSVBQ0EMPPSTOJktPT29pTxcXl/79++v1+t27d+v1+gEDBri4uDS7Z7du3YT/liN1OGdnZ5MWMULS6XQ6nU5vRNxqpg7LzlG1BAAA0DqbrH1A1RIAAE317NlTaK5KyNjgwYPT0tLq6uqEFhbwFvXp0+fy5cspKSkxMTGt/oPr4eFRWVlZXl4eHh5u3F5WViZYtmCTp6fnrVu3Fi9e7Ovr2+rODoQ7FQAAADtF1RIAAE0VFhYKgqBQKMzsEx4eLs5c8/f3N0mCjMXExHh5eZWWliYkJIj/7JpobGz85ptvxNfi90ynTp0y2efkyZOCIERERLQ68t69ezd7BkdH1RIAAICdomoJAPBbtmnTpr59+3bv3t3f39/d3V2v19+5c+fy5ctilNO/f3/zhy9atKjVLmQy2WOPPfbZZ5+dP3++uLh4+PDh3bt3VygUGo2msrLyypUrZ8+era2tnTZtmiAIcXFxaWlp2dnZBw8eHDlypKen5+3bt5OSkq5evSqTyZouzt1UfHx8WlrahQsXamtrhw0bFhAQ4O7u3tjYWFlZmZeX99NPPy1YsMCyz8a+EC0BAADYKfHrU6IlAMBvU3l5eXl5eVJSUtNNYWFhDz74YIf0EhoaOnfu3F27dhUXF+/du9dkq1wuF3MlQRCCgoImTJiQkJCQmpoqPnhOJJFIJk6cKK41bl7Xrl1nz569Y8eO7Ozs7OzsDhm/PSBaAgAAsFNi1RIT4gAAv02LFi26fPlyfn5+WVmZ+PQ0Nze3wMDAAQMGxMbGduBXL6GhoYsXLxYrkkpLS+vq6mQymY+PT+/evYcNG+bu7m7Yc+jQoYGBgadPn75x40Z9fb2rq2t4eHh8fHxYWJjlfS1cuPD8+fPZ2dkVFRWNjY1yudzX17dXr16t1mHZLYnx4+4AAABgP65evSoIQmRkpJMTXwcCAAA7RX014PBWrVq1atUqW48CANDBDE8gpmoJAADYM74Bs7HGxsbz589fuXKlvLy8oaHBxcXFz8+vT58+Q4YMkcvlht0sDw6apgzOzs5eXl49e/YcOXJk0yX0dTpdampqRkZGWVmZSqXq0qWLn59fRETEgAEDgoKCLOy0sLDwzJkz+fn5tbW1rq6uERERQ4cOteQhzWaui6wEAPAbZ1hoSSKR2HosAAAALSJasqX8/Pxdu3bV1NQYWmpra2tra/Pz80+dOvXEE09Yks60Sq1Wi4uf/fTTT88995y3t7dhU2Nj47Zt2woKCgwt9fX1BQUFBQUFSUlJFoY733///Q8//GCYWVlTU5ORkZGRkUE2BADA3eDxcAAAwCEQLdlMQUHB1q1btVptcHDwyJEju3fv7urqWl9ff+PGjVOnThUVFW3duvV//ud/QkNDheZKeMQWS6p+amtrCwoKjhw5UlVVdfz48ZkzZxr2+f777wsKCtzd3ceMGdOrVy+FQqFWqysqKnJzczMyMiy5inPnzn3//fdSqTQ+Pn7gwIHe3t4NDQ3Xr18/c+aM5R8FIRRgnySSzr8e35o1a5KTkw8dOmRmH8PnMHHixNGjR7/00kvWGh3sSGNj461bt5ycnPz9/a3WKWt4AwAAh0C0ZBtarXbPnj1arfa+++6bMmWK4QtJhULRv3//vn37Hjhw4OLFi7t37168ePFd3lO6u7v37dvXzc3t008/vX79uvGmS5cuCYIwY8aMHj16iC0ymSw0NDQ0NHTUqFGtnrm2tva7774TBGHy5MkDBw40dBcdHR0dHX03YwZgHfYZHrV1VO2+itra2g0bNiQnJ1t4nvXr148ePXrJkiWurq7t6A4OTaPR1NTUdOnSxZqdihPiiJYAAICdI1qyjfT09Orqan9//8mTJzctdJdKpZMnTy4qKhJnsd13331336O4cJJKpTJuvHPnjiAIlj8l0URaWlpjY2NYWJghV7oXxJqm1157LTU19cKFCxUVFWq1+rXXXhMEoaio6OLFi3l5eVVVVRKJxNPTs0+fPvfff7/Jb32GCq+LFy+eO3euvLxcKpWGhYWNHTtW/FjS0tLEdr1eHxYW9vDDDzddZ6qqqio5OfnatWtKpdLJyalbt25xcXF9+/Y17PD+++9XV1cvWLCgW7duYsu+ffvS0tIEQYiNjZ0+fbrYWFJS8q9//cvb23vJkiWGYwsKCpKTkwsKCoyfXikWrFnyOTSlUqn27t2bnZ0tlUonTJgwdOjQNn7q6LRM0pMOzJU6MKVq63kM+7d1DHv37o2Pj+/Vq5eF/fbt23fIkCH79+9/8skn2zRCSxQXFzc2NkZERHT4mdEhxJTHymseUbUEAAAcAtGSbWRnZwuCMHz48JbuF2UyWVxc3KFDh7KzszskWiopKREEwcPDw7ixa9eut2/fzsnJ6d+/fzvOee3aNUEQYmJi7n54rTp8+PD58+dNGjdv3mz8tqKioqKiIjMzc/78+W5ubiY7JyYmGk/Tu3r1an5+/vz588+dO3f27FlD+7Vr1woLCxcsWODj42PcuGPHjsbGRvGtRqPJzc3Nzc0dPXr0Qw89JDZGRUVduHAhNzfXEC3l5uaavBAEQSwci4yMNLScO3cuISHBeLGqzMzMrKysRx99dPDgwZZ8Diaqqqq++uqrsrIyNze3xx9/3LgvAMYOHjz4+OOPt+mQJ5544sCBAx0bLZWWlr755puJiYliJSnsk/i3tJWjJQ8PDzc3N9ZaAgAAdo5oyTaKi4uFX+cLTYlbxT3vRl1dXX5+/pEjRwRBMJmnFhMTk5SUtHfv3mvXrvXp0yckJMTd3d3yM5eVlQmCEBYWdunSpeTk5LKyMplMFhAQMHDgwPvuu69j779TU1Pj4+MHDRrk4+NjuMmOiIgYPHhweHi4QqFobGwsLi4+fvx4UVFRUlLSuHHjTM5w7ty5kSNHDho0yMPD4+bNm/v37y8vL//yyy+VSmXT9qSkpKlTp4oHKpXKnTt3NjY2RkdHx8fH+/r61tfXX7p06cSJEz/++GOPHj3E1dYjIyPFaCk+Pl4QhIqKCqVSqVAo9Hq9UqmsqKjw8/MT/hszGX70paWliYmJer1+4MCB999/v5eXV3V1dVJS0sWLFxMSEsLCwgICAlr9HIzl5eXt3Lmzrq4uICDgqaeeMl61HRD/VIr/NfyeLL7QaDSrV6/+/PPPlUrlihUr/va3vxkfmJqaOnXq1GXLli1ZskSn061Zs+aTTz65ffv2tGnTPvzwQ3d396ZnbmkA69ate++99zQazVNPPbV+/XrxUZgSiWT9+vXr168vKirS6XSGUalUqhdffPHrr78WBOHJJ59ct26dOB2p2f1NxjB69OiFCxcaMqAbN24MHz48KyvL09PTMJ7z58+vXbvWeHhiv42NjUuXLv3666+dnZ1NPoqRI0e++eab7f4RmCguLl69evVnn32mUqk2btzo4uLSUWdGhxP/37ByyiOVSo0fFwsAAGCfiJZso66uTmhSQ2RC3Cru2Q5N18aOjo4ePXq0ccuDDz6oVCrT0tJSU1NTU1PFTiMiImJjYw2rL5lRX18vCEJGRsbJkyfFFrVafePGjRs3bly9evXxxx+3MF1qaZFyY0OHDn3kkUdMGufOnWt47erq2qNHDz8/vw0bNly5cqVptDRy5MixY8eKr0NDQydOnPj5559XV1ePGjWqabtxnVFKSopKpTKe1CaXy+Pj42UyWWJi4tmzZw3RkiAI+fn5Wq1WJpMZIiS9Xp+RkZGbm+vn56fVavPz8wWjaOnMmTM6na53796GJMvX13fatGk1NTU5OTkpKSlTpkxp9XMwOH/+fEJCgk6n69Onz4wZM6y8Jgjsn5i/NBv9rFu3Likp6fjx4z4+PqtXrzbedOjQoXnz5m3evFn8v/T999///vvvjx8/7uXl9cILL6xcufK9994zc2YT33333YULFwRBmDt37tq1aw2TOn/44YczZ84EBwcb7/yPf/zj0qVLYqXeM888s2bNmtdff72l/U3GsHz58qVLlz7xxBNiFrB69eolS5YY50qCIJSWlhrKDI2tWbPmypUr6enper3+mWeeMd4UHBx894m/IAhFRUWvvfbatm3b9Hq9Wq1WKBS+vr67du0St+bk5JSXl7d0rJubW2xs7N2PAW1SV1d3+/ZtFxcXIvtOady4cebvygAAgBlES78Vnp6eDzzwgMn8O5lMNn369Pj4+IyMjPz8/NLSUqVSmZ6enp6e3r9//5kzZ5pf30H8Fe7UqVMuLi7jxo3r3bu3IAhXrlz59ttvMzMzz507N2zYsI4a/5AhQ5o2KpXK5OTk69evV1dXG2arCYJw+/btpjsPGjTI+K3hN9Jm28VVqEQ5OTmCIMTFxZmccMCAAYmJiQUFBeJbhUIREBBQVlZWVFQUHh5uPPEtIyPj+vXrQ4cOLSwsVKvVAQEBCoVCPEpMmu6//36Tk48aNSonJycvL8+Sz0F0+PDhc+fOiWcbO3aslWdtwNF99tln+/btEzPlDRs2GNo3bdq0Zs2aw4cPG1bs2rx58zfffCP+v/3uu+/GxcW99957lnf0wQcfhISECILw/vvvT5061RAtffDBBya5kiAIX3755cGDB8V1xzZu3Dht2jRDtNTs/sbGjRunUCi+/vrr2bNnX7169ciRIxs3bjTZp6Us7Isvvjhw4IA4zo0bN3b4cwl0Ot3HH3/8xRdfCIKgVqsFQZDJZP/3f/9n2CEvL6+ysrKlw11cXNo3ixl3Q61Wq9VqJycnyog6n5MnT6ampvLHCgCAdiNasg03NzelUqlUKo0X9DGhVCrFPdvXhVj4o9FoysrKvvvuu9zc3C+//HLhwoXOzs4mewYGBgYGBgqCoNfrb968mZmZmZKSkpmZ6efnZ1hIqFlyuby+vl6v148fP96wIJS4pPf+/fsvXrxoYbTUtEapqabfEpeXl3/66adi5ZQJjUbTtNHLy8v4raGip9l2ceVUUVVVlSAIW7ZsEX79i6j4ura21tASGRlZVlZ2/fr1sLAwMRWKiooSd8vLy9Pr9U0XWhJ/yk0fZS3OgzNOuERmvi0Xc6UxY8Y88MADLe0DtKSwsLBnz55N29evX//ss88arwSfn59vvIB9W+cHRUVFiS969OhRVFRkaA8PD2+6c3FxsWH/nj17trq/ieXLl7/44ouzZs167bXX/v73vzf967Rbt27FxcVNL7yoqMi4X5MhNVvo1CZSqfSNN9544YUX3n777U2bNkmlUqVSuXbtWjPZMWyusrLy1q1bHh4e4r+Y6EzE6mMAANBuLAxpG+KX7cazrpoSt5r/Wr5VTk5OwcHBs2fP9vf3r6qqSklJMbOzRCIJCgp66KGHxJlf6enp5k9uiDnEeiUD8a2Z2Rzt0DQR+89//lNfXx8SEvLMM88sW7Zs5cqVq1atWrFiRUtnaKmKp9XqHjEb0ul0Op1Ob0TcahxCiZlRbm5uaWlpfX29j4+Pl5eXt7e3t7d3fX19SUmJ+DM1/MraDk0/BwPxwVJnzpwx/vUbMNHS//BhYWFigZ6JH374YdeuXe+8846hJTw8PDc31/AHwfBHwMJCOTFgFV+IZUFmDg8ODjbsn5OT0+r+Jo1TpkyRy+Uvv/zy6dOnFyxY0HT/IUOGnDp1qml7SEiIoV/xeQUGp06d6qh6TH9//3feeefGjRsLFy6Uy+UrV67skNPiHrHJWksAAAAOgTsk2+jTp48gCCkpKcbBhDGtVis+zkzc8y45OzuLaw+lpKQ0W9FjQvyWvmnJjAnzX93f6wlZYlnQY489FhUV5e7uLt7u37p1q8M7EhdnWbx48aoWGPaMiIiQSqWFhYXiEwAN1UlilpSdnV1UVCSVSo2/HRVXdmgaw4lLpHft2tXycc6ZMycqKqqurm7r1q1NZ9IBIj8/v6ysrKbtc+fOXbx48fXr16uqqpYuXWpoDw0N/eGHHz755BPDctfPP//8/Pnzs7KyGhsbf/rpJ8M62S2d2cTSpUuLioqKioqWLl06Z84c8zs/9dRTS5YsKSwsLCwsXLJkyVNPPdWmq5NIJMuXL3/nnXdWrFjR7CSmyZMn7969u2n77NmzDeP8y1/+Yrxp9+7dkydPNj+MNvHz83v77beLiopiY2MvX77cgWdGx7LJE+IAAAAcAtGSbcTExHh5eZWXlx88eFCn05ls1el0Bw8eLC8v9/Ly6qg1Pnr27BkcHFxbW3vx4sVWdy4sLBQEwbAeUEv69esnvrh69apx+5UrV4TmJnl1LDGVc3L61aTO5OTkDu9ILMJqtrTBhIuLS7du3bRarVgdZqhOEjMmMUns1q2b8UOgxJip6cnFldHFQiQLOTs7z549u2fPniqV6osvvjZupdoAACAASURBVBB/CoCJl156KT4+vumvx8uWLYuPj3/ggQd69OhhMtcsODj4+++/37Zt2xtvvCEIwuLFi6dMmTJjxgwPD485c+YY4p6Wzmxi7NixgwYNio6O7tGjxyuvvGJ+5xUrVvTr12/IkCFDhgwZMGDA8uXL23p1MpmsV69ezz77bLP7z5w5MyUlpekfluXLl0dFRUVHRw8aNMh44fzs7OyzZ88aVvTvQL6+vmvXrjWeaQh7I/5jTbQEAADQFNGSbchkMnGR7IsXL27ZsuXSpUs1NTVarba2tjYzM/OTTz65ePGiYZ+O6nTkyJGCIJw+fdowmWvTpk3Hjh3Lycm5ffu2RqNRq9WVlZXJycniU4paXc+yR48e4ny9b7/9Ni0tra6urq6u7uLFi0eOHBEEYfDgwR018maJq13s37+/vLxcrVaXlZXt378/LS2twzuKj493c3O7cOHCV199de3atTt37uh0uoaGhuLi4uTk5H/961/GO4spUkNDg0QiMQRDkZGREolEpVIJTWbDxcXFSaXS7OzsgwcPVlZWarXaysrK/fv3X716VSaTNV073DwnJ6cnn3yyd+/eGo3m66+//umnn+7mwtEp/fWvf62qqjL8JWB44ezs/I9//KOgoKCystJQtWTYGhQUlJmZ+eqrrwqCIJVKFy9enJWV1dDQkJ6ebni4ocmZW/L3v//95s2blZWVH330kWHJM5OjDG9dXFw2btxYWlpaWlq6ceNGQyzb0v5Nx7B169bXX3/dJIM2cHNz++tf/9r0ert06fK///u/lZWVN2/eXLZsmfH5//rXv7q6upq/RnRKVC0BAAC0hGW8bSYsLOyZZ57ZuXNncXGx4YHTBu7u7o8//nhYWFgH9tivXz9vb+9bt25lZ2eL342Xl5eXl5cnJSU1O7wHH3zQ/AklEsljjz326aef1tTU7Nu3z3hTbGysuJ73vfPggw9u3749JyfHeIGYYcOGnT17tmM76tq16+zZs3fs2JGdnS3OdDMjKipKLDgKDAx0d3cXG93d3QMCAm7evCn8eg1vQRCCgoImTJiQkJCQmpqamppqaJdIJBMnTmzHYrFOTk6zZs3atWvX5cuX9+7dq1KpWBgYv006nW7Lli15eXmzZs0ys9vLL79s+TkPHz581+OCo7L+WktarVapVDo5ObVpcjQAAID1ES3ZUvfu3ZcsWXL+/Pns7Ozy8vKGhgYXFxd/f//evXsPGTLE8H1+R5FKpSNGjEhISDh16pQYLS1atOjy5cv5+fllZWXik87c3NwCAwMHDBgQGxtryQ20j4/P888/n5SUlJ2drVQqnZ2dg4KCBg8e3OHP6m6qV69es2fP/vHHH0tKSqRSqb+//+DBgwcNGtTh0ZIgCKGhoQsXLhR/UhUVFY2NjXK53NfXt1evXia1XWFhYU5OThqNxiRCioqKunnzppOTU9PHWg0dOjQwMPD06dM3btyor693dXUNDw+Pj49vd7Aok8meeOKJPXv2XLp06dChQw0NDffff3/7TgW0T7OVHa0WNHUsmUwWERGxa9cu1l1Gh7D+hLjGxsaKigq5XE60BAAA7JzEyvf6AAAADqeoqKiuri4oKMhqQY9KpaqurnZycvL19bVOj79Z3bt3T0xMbHUdAAAA0BKqlgAAAFph/aqlLl26tGNaNAAAgPUxTQAAAKAVYrTE/EoAAICmuEMCAABohfWX8QYAAHAU3CEBAAC0wvoT4gAAABwF0RIAAEArmBAHAADQEu6QAAAAWiFOiKNqCQAAoCmeEAcAANCKkJAQnU4nk8lsPRAAAAC7Q7QEAADQCjc3N1sPAQAAwE4xIQ4AAAAAAADtRNUSAACAfdFoNHl5eTKZLDIy0tZjAQAAaAVVSwAAAPZFq9Xq9Xpx7XAAAAA7R7QEAABgX7RarSAIrBoOAAAcAtESAACAfSFaAgAADoRoCQAAwL4QLQEAAAdCtAQAAGBfiJYAAIADIVoCAAAwR6PR1NXVNTY2Wq1HoiUAAOBAiJYAAADMUSqVRUVF1dXVVuuRaAkAADgQoiUAAABzpFJply5dnJ2drdajGC05OTlZrUcAAIB245YFAADAHC8vLy8vL2v2SNUSAABwIFQtAQAA2BeNRiMQLQEAAAdBtAQAAGBH9Hq9TqcTiJYAAICDIFoCAACwI+JsOIFoCQAAOAiiJQAAADvCQksAAMCxEC0BAADYEaIlAADgWIiWAAAA7AjREgAAcCxESwAAAHaEaAkAADgWoiUAAAA7QrQEAAAcC9ESAABAi/R6/Y0bN4qKinQ6nXV6JFoCAACOxcnWAwAAALBfOp1OpVIJgiCVWukLOaIlAADgWKhaAgAAaJFYrCSRSKzWo0QikUgkREsAAMBRULUEAADQIjFaslrJkiAIQUFBVusLAADg7lG1BAAA0CLrR0sAAACOhfskAACAFhEtAQAAmMd9EgAAQIuIlgAAAMzjPgkAAKBFREsAAADmcZ8EAADQIqIlAAAA87hPAgAAaBHREgAAgHncJwEAIKxZs+bRRx81v49EIhFfTJw48a233rr3g4JdIFoCAAAwj/skAMBvXW1t7YYNGzZs2CC+NURILVm/fv369evr6+vv/dBge3q9XiBaAgAAaBn3SQCA37q9e/fGx8f36tVLfCtGCWb07dt3yJAh+/fv79hhqNXqjj0hOoSVq5aqq6tLSkpqa2ut0x0AAMDdI1oCAPzWHTx48PHHH2/TIU888cSBAwc6agApKSlTp07Nz8/vqBOiA2m1WsGK0VJ9fX1NTQ05IwAAcCBESwAAO2IyGc3w9tixY4MGDXJ1dY2IiNiyZYvYqNPp3nzzzcjISB8fn3nz5hkKPSQSyYYNG8LCwsQ4oNljjZ0/f37EiBFNO21sbFy0aJGvr29QUNA777xjfMjIkSPPnj1799ebmpo6evToESNGKBSKnj173v0J0eGsXLXk5eXl7+/v5uZmne4AAADuHtESAMABPP3008uXL6+urv7xxx9TUlLExvfff//7778/fvz4tWvX1Gr1ypUrDfv/8MMPZ86cEUOBZo81Vlpa2q1bt6bta9asuXLlSnp6+vnz5xMTE403BQcHFxcX380VpaWl/f73vx85cuTJkydlMtnq1avv5my4d6wcLbm6unp5ecnlcut0BwAAcPckra4oAQCA1Ugkv/qHyfA2PDx82bJl06ZNCwsLM2zt16/fN99806dPH0EQbt68GRcXl5eXJx6Vl5fXvXt3cbdmjzXm6up669YtQ52IodOePXseOHCgf//+giBkZGRER0cbxlZbW+vv719XV9eOa9TpdC+88MJHH30kkUjE2MLZ2VmhUBh2UCqV4iSslrS60DgAg8DAwJKSEjM7dO/ePTExUfyTDgAA2oFoCQBgR1qKli5cuPDGG28kJSX5+Ph88MEHEyZMEATBzc3N+DFtUqlUTGTEyMaQvzR7rLGoqKijR48a5qMZOnV1da2qqnJxcREEoaGhwdXV1TC2q1evjh8//tq1a+27zPr6+o8//viNN97QarVKpdLFxSUjI8PHx0fcWl5ebia0kslkxjkU7rW8vDy9Xh8aGurs7GzrsaDN3nvvve3bt1dWVprZh2gJAIC75GTrAQAA8AsXF5e6ujqxgKi0tNTQPmjQoH379un1+oSEhHnz5ok1COHh4d9++21ERETT8xjX9TR7rLEhQ4acOnWq6VJHISEh169fF3/hNEmRTp06NWzYsHZfpqur69KlS//0pz9t3rx59erVt27d+vjjjw3LOXl7e7f7zOhYer1eo9EIghAVFSWTyWw9HLSZl5eXrYcAAEDnx1pLAAA7Mnjw4Hfffbe2tjY3N3fBggWG9qeeeiozM1N8bJZh1Zvnn39+/vz5WVlZjY2NP/3005NPPtnsOZs91tjkyZN3797dtH327NlLly4tKioqKir6y1/+Yrxp9+7dkydPbu9V/szV1fWFF14oLCzcuHHj4cOHKyoq7vKE6HDijEXBimstAQAAOBzukwAAduTjjz9OTEz08/MbM2bM+PHjDe1Tp06dMWOGp6fnq6+++sUXX4iNixcvnjJlyowZMzw8PObMmfPUU081e85mjzU2c+bMlJSUK1eumLQvX748KioqOjp60KBBjzzyiKE9Ozv77Nmz06dPv9urFQRBEFxcXBYvXnzx4kWmqNshcYqlVCplfSsAAICWsNYSAADC2rVrT548efjwYUt2njRp0qhRo1566aV7PSrYnDghTqfTdenSxdZjQXusWLHio48+Yq0lAADuKdZaAgBAePnlly3f2cIECp2ARCJh9W4AAADzmBAHAABgF9RqdUNDgzgLDwAAwFEQLQEAANiFqqqqgoKC6upqWw8EAACgDYiWAAAA7IJYrySTyWw9EAAAgDYgWgIAALALREsAAMARES0BAADYBaIlAADgiIiWAAAA7ALREgAAcERESwAAALan1+vFaMnJycnWYwEAAGgD7l0AAACad+fOHa1W6+7u7uzsfK/7EnMliURC1RIAAHAsREsAAADNq6ysbGxslMvlVouWyJUAAIDDIVoCAABonkKhUKvV1pmhptFoBKIlAADggIiWAAAAmufr62u1vqhaAgAADoplvAEAAGxPrFpiDW8AAOBwiJYAAABsj6olAADgoIiWAAAAbE+MlqhaAgAADodoCQAAwPZYxhsAADgooiUAAADbY0IcAABwUERLAAAAtscy3gAAwEERLQEAANiYXq/X6XQCVUsAAMABES0BAADYmDgbTiKREC0BAACHQ9E1AABAM8rKypRKpa+vr7e3973uizW8AQCA46JqCQAAoBlarVav10skEuv0JRAtAQAAx0TVEgAAQDOsGffIZLKuXbuyhjcAAHBE3MEAAAA0w5rraru4uAQFBVmhIwAAgA7HhDgAAIBmiFVLUik3SwAAAOZwtwQAANAM1j8CAACwBNESAACAKb1er9frBaIlAACA1hAtAQAAmBJLliQSCRPiAAAAzONuCQAAwBQLLQEAAFiIGyYAAABT1nw8HAAAgEMjWgIAADBF1RIAAICFuGECAAAwxePhAAAALORk6wEAAADYHTFacnKyxp1SbW1tSUmJm5tbcHCwFboDAADoWFQtAQAAmLJm1ZJGo9Hr9VboCAAA4F6gagkAAMCURqMRrBUteXh4uLu7ky4BAAAHRbQEAABgyppVSxKJxDoz7wAAAO4FJsQBAACYYhlvAAAACxEtAQAAmCJaAgAAsBDREgAAgCmiJQAAAAsRLQEAAPyKmCsJREsAAAAWYM1IAACAX9HpdE5OTnq9XiKR2HosAAAA9o5oCQAA4FecnZ0jIyNtPQoAAADHwIQ4AAAAAAAAtBPREgAAgM2oVKrKysra2lpbDwQAAKCdiJYAAABspqGh4datW7dv37b1QAAAANqJaAkAAMBmxKfROTmx/CUAAHBUREsAAAA2o9FoBEGQyWS2HggAAEA7ES0BAADYjFi1RLQEAAAcF9ESAACAzYhVS0yIAwAAjotoCQAAwGaoWgIAAI6OaAkAAOAXer2+uLj45s2ber3eCt2xjDcAAHB0REsAAAC/0Gg0tbW1d+7ckUgk97ovnU6n0+kEqpYAAIAj4ysyAACAX8hkssDAQGuWLEkkEqmUb/sAAICjIloCAAD4hVQq9fDwsE5frOENAAA6Ab4iAwAAsA3W8AYAAJ0A0RIAAIBtULUEAAA6AaIlAAAA26BqCQAAdAJESwAAALYhRktULQEAAIdGtAQAAGAb4oQ4qpYAAIBDI1oCAACwDaqWAABAJ0C0BAAAYBtULQEAgE6AaAkAAOBner2+vr5erVZbpzuqlgAAQCdAtAQAAPAzlUpVWFhYWFhohb60Wq1erxeoWgIAAA6OaAkAAOBn1iwjEvuSSqUSicQK3QEAANwjFGADAAD8zJqLH8lkssDAQLFwCQAAwHERLQEAAPxMjJasU7Ukk8k8PDys0BEAAMA9xYQ4AACAn4mT1Fj8CAAAwHJESwAAAD+zZtUSAABA50C0BAAA8DOiJQAAgLYiWgIAAPiZGC05OzvbeiAAAAAOg2gJAABAEARBp9OJay1RtQQAAGA5oiUAAABB+G/JklQqlUq5QQIAALAUd04AAACCwEJLAAAA7UK0BAAAIAjWjZb0en19fb1arbZCXwAAAPcU0RIAAIAgCIIY9FhnDW+VSlVYWFhYWGiFvgAAAO4pSr4BAAAEwepVS3K5XCaTWaEvAACAe4poCQAAQBCsGy25urp2797dCh0BAADca0RLwC+KiopUKpWtR4FOwsPDw8/Pz9ajANAGLOMNAADQDtw8Ab+YMWNGVlYWv1Tg7jU0NMybN++f//ynrQcCoA2sudYSAABAp8Gv0MCvfPPNNw899JCtRwGHt27duoKCAluPAkAbaLVavV4vULUEAADQRjwhDgAA4OfZcDKZTCKR2HosAAAAjoRoCQAAgIWWAAAA2on7JwAAAEEmk3l4eBAtAQAAtBX3T4Bdk0gk4tofuEt8kgDMc3FxcXFxsfUoAAAAHA8T4gA0r7q6esyYMbYehf0aMWKEUqm09SgAAAAAwMaIlgC7ZsNCmzfffPPxxx/vwBMGBwd34NnaqsM/yTlz5qxZs6ZjzwngN6KhoaGwsLC8vNzWAwEAAOgAREvA3VKpVLYeQjPuclSVlZUHDhz44x//2IFnLikpMb+DfX6SLVmwYMGePXsqKyttPRAAjketVtfX1zvWX3oAAAAtIVoCWrRv3z65XC6RSDw9PWfMmHHixInf/e53xjvs2LEjJCTExcVFoVCMGzcuNTXVeKtEIhGfYH306NHY2NjevXsfPnzYeJPh+dYmb0VXr15t2ijKzs6eOXOmt7e3q6vrqFGjjh071rt3bwtHZaHPP/981qxZJsvZmjlzSEiIRCKJiooS3/bo0UMikYSFhYlve/bsKV6IxIiFZxZ3rqmpmTZtmlwul8vl+/btM2xt9WckmP0ks7Kypk2bFhISEhISMmPGjOzsbAv7FQTB2dl5xowZn3/+eeufJgD8mlarFQRBJpPZeiAAAAAdgGgJaNGsWbN27Nih1+urqqr+9a9/FRUVlZWVGbaeOHFi69athw4dqqurKy0tfeWVVxYtWnT+/HnDDuIMrA8++ODs2bOJiYnZ2dmfffaZuOnOnTuBgYG1tbXi25qamsDAwDt37hj33qtXr2bncGVlZY0fP378+PGXLl1SKpVfffXV1atXDbUzrY7KQocOHXr44YeNW8yf+dSpU+PHjz916pT49uTJk+PHjz958qT4NicnR7wWvRELzyzuuWzZsr/97W8qlWrHjh2zZs0yHGv+Z9TqJ/nss89u2LChqKioqKho/fr1c+fONaRL5vsVjRs37sCBAxZ/qADwMzFa4ml0AACgk9AD+K9hw4YdO3bM8LZr166JiYm3b99udufRo0fn5uYat6Snp//+9783bhEE4ejRo4a3Go3G8HrOnDlffPGF+Hrbtm1/+MMfmu2l6R/SKVOmfP755y1dgiWjsoSfn19FRUWbzpyfnz9+/PiioqLCwsLx48fn5+ebnLOlv3BaPbMgCDt37mz2POZ/RuZ7nzx5ckJCgnFLQkLC1KlTLelXVFZW5uvr22x3b7311qJFi1odFYDfptLS0itXrty6dcvWA+n8li9f7u3tbX6f8PDwS5cuWWc8AAB0SnxdBrQoJSVl8eLFJ0+eDAoK+t3vfufq6vrhhx9269ZN3Hr27NnIyEiTQ9zc3ExajGt/jOc+PP300+vXr58zZ44gCNu2bfvb3/5m4ahOnDixZcuWlrZaOKpWVVVVeXp6tunM4eHh//73v5977jm9Xr9582bDbLhWWTLmlhYUN/8zMu/EiROGOjLRsGHDTEqTzC9k7uXldfv2bUv6AgBjGo1GoGoJAAB0FtzTAC3q37//sWPHjFsmTZpkWC/J1dU1KysrIiKifSf//e9//9xzz4krW2dmZo4dO9bCA7VabbPLBnXIqAw8PT2rq6v9/PzaceaWFjZqyd2M2fzPqFX6JhPlmraYUV1d7eXlZfn+AOyWVquVSqVt+rvrLrsTWGsJAAB0Fqy1BLRBQkKC4fWkSZO+/PLLdp9KJpPNmjVr+/btX3755axZsyz/BWPEiBFm1ve5y1EZREdHX7p0qU1nvnHjxh//+MdPPvlky5Yt8+fPv3HjhvkuDI9G6qgxi4x/RuaNGTMmJSXFuOX06dOWZ3yCIGRkZMTExLRhcADs1c2bN3NycqxWh0jVEgAA6EyIloAW+fv779+/v6qqSnybnJzs7Oxs2Lp27drNmze/+eabeXl5arW6srLyyJEjkyZNsvz8Tz/99NatW7dt2/b0009bftSaNWteffXV//znP3q9vr6+Pjs7e8uWLfPmzeuoUYmmTJly9OhR4xbzZ87Pz1+wYMGnn34aHBwcEhLyySefLFiwID8/3/gMzs7O4kPWSkpKPvzww/j4+Lsfs/mfkXnr1q1bsWJFcnKyRqPRaDTJyckrV65ct26dhYcLgnD06NHJkydbvj8Au2XldbWpWgIAAJ0J0RLQosjIyODg4IULFwYHBw8ePPjJJ5/csWOHYWtoaOipU6dycnKGDh2qUCji4+NN1u4RJ1ZIjJic/7777tPpdHq9PjY21mST8SEmhw8bNmzfvn3r1q3z9vYODg5++umnGxoa/vnPf1o4Kgs9++yzO3fuVKvVFl7v8OHDv/322+HDh4tv4+Livv32W0N4JBIfsiaVSuPi4nJycg4dOmTJmQ0fQrNvzf+MzH+S/fr12759+1tvveXt7e3t7b1u3bqvvvqqT58+lvQrCIJard6zZ8+zzz7b1s8WgB0KCwuLjIx0dXW1Ql9iriQQLQEAgM5C0qaFRYDOLS4ubu3atQ899JCtB2IX/v73v4eHh//5z3+29UDs1KZNm27cuNFSldO6desKCgoMkR8AGKhUqhs3bshksqioKFuPpfNbsWLFRx99VFlZaWaf7t27JyYm9u/f32qjAgCgk6FqCUDzli9f/sUXX9h6FPZrz549r7zyiq1HAcDxWHnyHQAAwL3GbQ2A5nl6epqscg1jx48ft/UQADgkcQ1vZsMBAIBOg2gJAADAeljDG7Ct2tray5cv23oUsCq5XB4dHW3rUQCdGdESAACA9YhVS0yIA2wlMzNz5MiRYWFhth4IrEStVuv1+oKCAlsPBOjMuK0BAACwHqqWAJvr2bNnZmamrUcBK7l8+fLDDz9s61EAnRzLeAMAAFgPVUsAAKCTIVoCAACwHqqWAABAJ8M3ZsAvrl69OnbsWFuPAp1ETEyMrYcAoHVqtbqiosLFxcXb29s6PRItAQCAToZoCfhFjx49Xn311VGjRtl6IHB4H3zwQWlpqa1HAaB1KpWqpqZGo9FYJ1rS6/VitMSEOOA3RSKR6PV6W48CAO4VbmuAX0ilUoVCYbUvrtGJubq68nsj4BAaGxsFQXB2drZOd2KuJJFIqFoCcE+lp6fHxsYKgtBspGV+KwC0FWstAQCA3y61Wi0Iglwut053Tk5OkZGR4eHh1ukOgJ2wfoITExNjplPzW++d4OBg63cKwAqIlgAAwG+XWLVktWhJEAQnJydrdgcA9qOkpMT8DiqVyjojAdCxiJYARyKRSMxsMrP17s8PAJ2SlSfEAehksrOzZ86c6e3t7erqOmrUqGPHjvXu3dt4h6tXrzZ7kyY21tTUzJw5093dvV+/frt377a837fffnvo0KEeHh5hYWFLly69detWB1yMIAiCkJWVNW3atJCQkJCQkBkzZmRnZxtvNX+9ZkbVs2dP8UOQGDE+844dO0JCQlxcXBQKxbhx41JTUzvqigBYAdESYE63bt1MWrp27dpRJ6+rq2vrIWZKlzukqtnyk3Tg5wAAtqLVanU6nWDdqiUAnUZWVtb48ePHjx9/6dIlpVL51VdfXb16tbKy0nifXr16NXt/JTa+++678+fPv3Xr1pEjRz788MNjx45Z2HVsbOy5c+eUSmVaWppCoZg+ffrdX44gCFlZWc8+++yGDRuKioqKiorWr18/d+5cQ7rU6vWaGVVOTo54yXojhq0nTpzYunXroUOH6urqSktLX3nllUWLFp0/f75DLgqAFRAtAeaYPOTLx8enpqam6Tct4tuEhARBEBISEiQSSVhYmKH92LFjAQEBQ4YMyc/PF/cvLy8fOnSou7t7YGDgn//8Z0syJvG0Jl/v1NbWzp07V6FQDBw4MCMjw+SQYcOGDRs2zMIrbfb8YsuHH34YGhoql8v37dtn/nMAAMciliw5OTnxVxmAdnjppZdef/31+fPnBwcHOzs7h4aG/ulPf6qoqLD8DAMHDhw/fryLi0t4ePi77767du1aCw8cN26c+MLHx2fVqlUnT55s8+ib8+KLL77++uuRkZHi24iIiJUrV7744ovi21avt92jWrVq1aZNmwYOHOjq6qpQKB544IHNmze//PLLHXJRAKyAaAloA/FrmabftJw+fXr48OETJ04UBGHChAlDhgw5fPiw8N/vo27dulVQUPDiiy8uXbpU3H/ZsmXvvvtuY2PjtWvXxo4du2zZsla7njhxYtOvvF588cVu3bpVVlZ+9913Bw8eNNlqMsh2nF9sKS4uzszM3LFjx6xZs8x/DgDgWKy8hjeATubEiRMTJky4mzOMGjXK8DomJubs2bOWHKVSqdasWdO3b183Nzc/P79x48Z11P3YiRMn4uLijFuGDRt2/Phxw1Yz13s3ozp79mxkZKTxXLmYmJjk5OR2XwgAK+PZ2EAzQkJCiouLxdfiV9nBwcFFRUUt7T98+PBu3brt3bt3xowZe/bs6dmzZ0xMjGHrI4880qVLlwkTJjz33HNiy8GDBz///HPDDv7+/ps2bWrHOLdv356TkyOXy/38/P74xz++8sorxlvPnTvXjnM2JX6BNn36dPF3MFjo5MmTCxYssPUo0DnNmzfP5NYfwpxH4AAAIABJREFU7WP9NbwBdCZarbZjax4t/OvoL3/5i7+//8mTJ728vNRqdX5+fr9+/TpqDC191yi0dr13MypXV9esrKyIiIh2DRmA7REtAc0wpEgSicTM9y2NjY2GO4A1a9Y89thjkyZNWr169Z49e5rd38np5z9xgwcPPnr0aIcO+edfkGzC+HOAQdeuXaOiomw9CnRCW7duHTVqFNFSh2ANbwB3Y8SIEQcOHJg3b167z5CcnPzoo4+Kr9PT0wcPHmzJUV9//XVubq6Xl5cgCE5OTr6+vu0egIkxY8akpKRMmjTJ0HL69OmxY8eKr81fbztGpVKpunTpIgjCpEmTvvzyy+XLl3fANQCwBaIloG2cnZ337dv36KOP/uc//1m7du2PP/4otvft23fEiBGTJ0+Oi4vr1auX8SEnT5585JFHEhMTH374YbFlwoQJW7ZsGT9+fHBwsFTa/nmpTz755Hvvvbdq1ary8vK3337bZKu40JKFldVt1dLnAIPY2FjD2gRAB0pJSbH1EDoPJsQBuBtr1qyZPn16eHj42LFjGxoabty4kZSUlJyc/Omnn1p4huvXrx89evSBBx4oKytbtmzZmjVrLDmqV69e//73vxctWqRSqQ4ePLh9+/a7uIhfWbdu3ezZs729vQ23kStXrvzqq6/Ereav15JRiTeQ06dPLykp2b1792effSY+CW7t2rX333+/Xq//wx/+EBIScufOnXPnzm3cuFFcYgKA/WOtJcCcgIAAkxZxySFvb+8tW7Z88sknxptefvnlH3/8ceXKlSaHBAcH9+jRY8OGDevXrxdbXnjhhfLy8lGjRvn4+IwbN+6tt95qdSSGBbONV85+5513CgsLvb29J0yYIH6DZFylrNVqLZ/i3uz5DS0m/zX/OQCAQ9Dr9VaOlvR6/a1bt6qrq1mlDugchg0btm/fvnXr1nl7ewcHBz/99NMNDQ3//Oc/DTsYP/Ok2eefLFy4cM+ePX5+fmPGjFm4cGF8fLwl/W7bti0xMTEgICAmJubSpUu7d+8Wfn0TaL5fM1v79eu3ffv2t956y9vb29vbe926/2fv3oObOs/Ej7/yRcZIvglbimwTEhIugTYtYAxkw6+zJA4YAsUuxewsBQbadNKEsKElXMJk0kzBEJt4E2/oUvACTRpCgvFyM7kRZoBAApvutjUOFEMAW8YXLBssY1uypN8fp1EU2ZZlIevo8v38wUjvOed5n3NagvToPc/ZvGfPnlGjRnlyvn1mJb75ABkRETFp0qSqqqrDhw9L4+np6Z999llVVdXEiRPVavUjjzxy/PjxXbt2eXI1AAQCdzf7AOFm0qRJ+fn506ZN8+7w4uLiK1euFBUVOQ+6v6UOoWrz5s3V1dXOHy4BX8nJyfnJT36ycOFCuRMJehaL5erVqwqF4sEHH/TPjF1dXV9//bU/Z8T69eu3bt3q8jB4F8OGDTt69OiYMWP8lhXkde7cucWLF1dWVsqdCJ8S/eTChQtZWVnV1dVyJwKEMm6IA3zD8ZuMc2nJ8XMQnxsAINDI0sM7MTGRfxEAAECIobQE+EaPXxX4/gAAAcv/PbyjoqJSUlL8Nh2AQMYPkABCCb2WgECh0+kU3eh0OrnzAoDQJJWWpIcTAYCf2b8hdyIA4AOUloBAUV9fb++mvr5e7rwAIDR1dnYKHg8HIPAMGzas+8+NkmHDhsmdHQD0gBviAABAOJKl1xIA9OnatWtypwAA/cOqJQAAEHbMZrPdblcoFJSWAAAA7hKrlgAAQNixWCyCJUtAWLJarWaz+euvv5Y7EfiJwWCw2WxyZwGEOEpLAAAg7KhUquHDh1utVrkTAeBvFy9evHz58vDhw+VOBP7DExuAgUZpCfCH/j5Z1idPopUeattjnIF+0q2b+G6y8kl8APBQZGRkZGSk3FkA8LcxY8Y89NBDlZWVcicCP7lw4UJWVpbcWQAhjl5LgDt6vd4ncbrXQeLi4vq1v08m9TqfAZ3at/Fd+Pa8AOBucEcGAAAISZSWAHfq6uqc33Z0dKxYsUKn0+n1+l27do0cOVIalx4H29LSsmzZsri4uFWrVjkOKS8vl7Y6x9FoNCaTyfEcWedNPe7f27xCiOXLl48aNUqlUmVlZR0/frzPM+pXPtLb8vJyx4FDhw71In5bW9uSJUvUavW4ceMqKipcDsnMzMzMzOwzczfxpZHi4uL09HSlUllWVub+vADA/7q6ui5fvnz58mW5EwEAAPAxSktAP6xbt85sNldUVFy5ckWlUhmNRmlcWkSTm5s7depUg8EwY8YMxyEzZ87svsRGOtD+DedNPe7f27xCiPz8/IsXL7a0tKxZs2bOnDl9nkK/8jlz5szkyZNnzpwphMjOzs7IyDhy5IgX8VevXq3X641G48cff3zo0CGXrd0vQn/jSyO1tbWVlZV79+7Ny8tzf14A4H9dXV1CiIgIPnoBAIBQQ68loAdpaWm1tbXSa2m1S2pqqsFg2LNnz/nz5zUajRDipz/96U9/+lPnow4ePKhWq4UQjz32mG/z6W3eS5curVy58vTp052dnePHjzeZTL6dd/LkyXq9fv/+/bm5uaWlpQ8++ODDDz/sRZx33nmnqqpKqVQmJyc/9dRT69atc9567tw5n2Sbn58vhMjJyZEe/CS7//7v//7888/lzgIh6PLlyw8++ODChQvlTgT9I7UMj4rioxcQTAaifaQnB8rSphMAvMbnG6AHBoNBeuHy77T0m3NvpLqSF8xms/sHYPc27/z58xcsWFBSUqLRaG7evOmrzlDO+WzcuHHevHmzZs165ZVXSktLfRL87oN4PbU/HzQ+ceLEZ555xm/TIXzk5eX5vI4MP5D+S07jcCAw6fX6GzdudB933z7Su9vtPTmwv3WifrWhbG1t7VdwAOgTpSWgH+bNm1dYWLhx48bGxsZTp06Vlpa+/fbb3oWKjo4uKyt78sknP/nkk/z8/BMnTngxr8FgyMjIiI+Pr6ysfPfdd73LxH0+o0ePnjJlyuzZsydNmjRixAjvgi9YsGDLli0vv/xyY2Pjq6++6rJVarR09uzZu8m/N/26zr6Vlpb2+OOP+206hA+eoBykpFVLlJaAwOTSXlMIUV5ePmvWLPHdqk1bW9szzzyzb9++ESNGvPXWWy6H9OsjzfXr1+fPn3/x4sWcnJzi4mKVSuVm3jt37qxYsWLfvn3333//nj17Ro8e7dihx/2l0tUbb7yxefPmhoaGvXv35uTkCKc2lNJuLHQC4Cvc8A+4o9Vqnd8WFha2tLRotdqxY8ceOHCgoKBAGpf+he6xXbRjxGWT1BIoKSlpx44dJSUl7vfvbd5t27YtW7ZMo9GsWbNm0aJFjkzczNvffIQQa9euPXHixEsvveTJFesxfkFBQU1NTVJSUnZ29tKlS53zFEJYrVbPP9n0GN8x4vKn+/MCAH+SVi1xQxwQLAa6feSuXbv27dt3+fJltVr9wgsv9DmvRqOpq6s7efLkBx98IJyqQrShBBAIuCkX+NakSZPy8/OnTZsmdyKBpbi4+MqVK0VFRXInEkw2b95cXV39H//xH3InghCUmpr64x//+Pe//73ciQQrm81WX1+vVCqHDBniz3lv3LhhMplSUlISExP9OW+YW79+/datW50ff9HdsGHDjh49OmbMGL9lBXmdO3du8eLFlZWV4rvtNSVSe03HW5feCBqNpqqqSmp/2dTUlJyc7N2XKYVCUVNTk5aWJoQwGo2jR49uaGhw2cE5slarvXDhgjRvY2OjVqt1mbd7ryXnkd5eh4kLFy5kZWVVV1fLnQgQyvjpDIA7juU/lJYAhIbOzk6TyRQVFeXn0hJtvIEA1Ft7TU/4qn2kzWbr89mRzsu9fVgY8nMbSgAhjBviALjDkmkAISY6Olqr1SYlJfl5Xtp4AyFAah9psVhqa2s3b97ssjUzM1Nqt+SJ7du319TUNDc3b9iwYf78+e53zsvLKyoqstlsJpNpx44d3qT+DakNpcViOXr0KE0hAfgKpSUA/aPT6RTd6HQ6ufMCAI9ERUUlJCT4/6402ngDgcylvaYYyPaR0iFLlizJzc0dPny4yWTatGmT+3k3bdpUV1eXnJz86KOPzp49u888aUMJwM9YlQ2gf+rr6+VOAQCCjM1ms9lsghvigEDV/eNNj0UilUq1e/fu3bt397jPl19+6clcjqN6fJZcj/MOHjx4+/bt27dvt1gshw8fdm4N1uP+zoMuO+Tk5PjqVj4AcODzDfCt5ubm/Pz8nTt3yp0Igt758+fvv/9+ubMAECikJUsKhaLPjioA0KMXX3xx48aNSqVy5syZn376qdzpAMB3UFoCvmWxWEwmU3Nzs9yJIOi1t7ffvn1b7iwABAruhgNwlzZs2LBhwwa5swCAnlFaAr6l1Wo3bNgwbdo0uRNB0Nu8eTPPuAXgIPXw5m44AAAQkliVDQAAMLBYtQQAAEIYv54B3/H3v/89ISFB7iwQ9AwGg9wpAAggUmmJVUsAACAk8REH+FZaWlpBQYHcWSBELFy4UO4UAAQK6YY4Vi0BAICQRGkJ+Nb+/fvlTgEAMFAsFktHR0dMTIxSqfTz1NwQBwAAQhi9lgAAQFhoa2urq6u7efOm/6emtAQAAEIYpSUAABAWOjs7hRAxMTH+n5peS0CYUCgUA7p/b0F6i+OT+O6ndrPp7mcf6PwB+AqlJQAAEBY6OjqEEIMGDfL/1JGRkVFRUaxaAgKWXq/3SRy73e4yEhcX16/9fTKp1/kM6NS+je/Ct+cFoL8oLQEAgNBns9nMZrOQadVSenr6/fff7/8eTwA8VFdX5/y2o6NjxYoVOp1Or9fv2rVr5MiR0ri0EqelpWXZsmVxcXGrVq1yHFJeXt59nY5GozGZTIpvOG/qcf/e5hVCLF++fNSoUSqVKisr6/jx432eUb/ykd6Wl5c7Dhw6dKgX8dva2pYsWaJWq8eNG1dRUeFySGZmZmZmZp+Zu4kvjRQXF6enpyuVyrKyMvfnBcBvKC0BAIDQJ9WVpNVDcucCINCtW7fObDZXVFRcuXJFpVIZjUZpXFpEk5ubO3XqVIPBMGPGDMchM2fO7L7ERjrQ/g3nTT3u39u8Qoj8/PyLFy+2tLSsWbNmzpw5fZ5Cv/I5c+bM5MmTZ86cKYTIzs7OyMg4cuSIF/FXr16t1+uNRuPHH3986NAhl63dL0J/40sjtbW1lZWVe/fuzcvLc39eAPxGwd89AACCSGpq6o9//OPf//73cicSZJqbm2/evKlSqVJTU+XOBf6zfv36rVu3On8/727YsGFHjx4dM2aMF/F/9KMf1dTUeJsd5NHZ2RkZGXnt2jUhRFpaWm1trfPW1NRUg8Gg1+vPnz+v0Wi6H65QKFpbW9VqdY/BFQrXr1fdR9xs7W3eS5curVy58vTp052dnePHjz958qSHs3ieT25u7sKFC3Nzc/ft21daWrpnz57ecnYTTaPRVFVVSfk3NTUlJyff5ZdN9/n39trFhQsXsrKyqqur7yYTAO7xwx0AAAh9MjZaQgi7fv365s2bH3jgAbkTQT9UVlb+7ne/k14bDAbphUthoqury02E3upKfTKbze5vjO1t3vnz5y9YsKCkpESj0dy8edNXnaGc89m4ceO8efNmzZr1yiuvlJaW+iT43QfxempuQAb8jNISAAAIfe3t7UKI2NhYuRNBqBkzZsz3vvc9ubNAP9hstj576s+bN6+wsHDjxo2NjY2nTp0qLS19++23vZsuOjq6rKzsySef/OSTT/Lz80+cOOHFvAaDISMjIz4+vrKy8t133/UuE/f5jB49esqUKbNnz540adKIESO8C75gwYItW7a8/PLLjY2Nr776qstWqdHS2bNn7yb/3vTrOgPwOXotAQCAEGexWKxWq0KhYNUSgB5ptVrnt4WFhS0tLVqtduzYsQcOHCgoKJDGpRbRPbaLdoy4bJJaAiUlJe3YsaOkpMT9/r3Nu23btmXLlmk0mjVr1ixatMiRiZt5+5uPEGLt2rUnTpx46aWXPLliPcYvKCioqalJSkrKzs5eunSpc55CCKvV6vn9cT3Gd4y4/On+vAD4AauWAABAiJPuhouJieHJQQB6VF9f7/xWpVJt3bp169atLru5qYz0tiknJ6fHW8N63L+3eXNycnJycno8trd5+5uPEOLIkSNPP/10n8+GcxNfpVLt3r179+7dPe7z5ZdfehLZTXw3J+7mvAD4AaUlAAAQ4qS74ViyBAC9cVTei4qK5M0EQDCitAQAAEIcPbwBwD2eGw7gbtBrCQAAhDKbzdbZ2Snk6+Hd0NBQW1srlbcAIFjodDpFNzqdTu68AAQiVi0BAIBQJtV0oqKioqLk+djT3t5uNpsTExNlmR0AvOPSfwoA3KC0BAAAQplUWpJryZIQQqvVWiyWmJgYuRIAAAAYUJSWAABAKJO9h3dsbKyMhS0AAICBRmkJ+NaxY8eMRqPcWQD9MGzYsMzMTLmzAAIaPbwBAAAGFKUl4Fvr1q3r6urSaDRyJwJ4pKamJjMzk9IS4EZnZ6fNZouIiOB+NAAAgAFCaQn4joKCgmnTpsmdBeCRrVu3fvHFF3JnAQQ0aclSTEyMQqGQOxcAwUehUNjtdrmz6JubPKX/+t3lWQTLdQAglwi5EwAAABgonZ2dgrvhAPRFr9f3OO7/ekpcXJwXR7nJ0yen4HkQ7/IHEOwoLQEAgJCVkpIydOjQhIQEuRMBENDq6upcRsrLyxUKhfOCR+ltUVFRXFzc6dOnS0pK4uLiysrKHJuOHTum1WozMjKuXbvmOGr58uWjRo1SqVRZWVnHjx+XBjs6OlasWKHT6fR6/a5du0aOHCmNazQak8mk+IYnmXfPUwjR1ta2ZMkStVo9bty4iooKl0P6dTd9j/GlkeLi4vT0dKVSKV0E7/IHEBq4IQ4AAIQshULBkiUMHJvNdvv27ebmZrkTQT+0trZ6sgZn5syZdrvduT4ivbVarTt37pw1a9aSJUt27tyZl5dnNpulTU1NTdXV1QcPHnz++ef3798vHZWfn19cXGyxWE6cODFnzpzW1lYhxLp168xmc0VFhVqtPnz4sOMxMkajsb+3nnXPUwixevVqvV5vNBpv3769fft2l0PuPr40UltbW1lZeezYMekieJc/gNDA33zgW5MmTcrPz6fXUigJ7c83Uq+l3bt3y50I/Co1NfXHP/7x73//e7kTAYLA+vXrt27d6v7xr8OGDTt69OiYMWO8iB8dHT1o0KDo6GhvE4QMurq6EhMTr1+/LoRIS0urra113pqammowGBxvXT5ION72+KK5uTkxMdFkMqWmpt6+fVsIcenSpZUrV54+fbqzs3P8+PEnT56Udtbr9efPn+/x0THefXRxOUqj0VRVVUnxm5qakpOTfd5ryXmkt9cB4sKFC1lZWdXV1XInAoQyVi0BweSvf/3rD37wAzGQd/63tLTk5OQ4FmzDxZQpUz788MP4+Hi5EwEQHDo6Oux2u1KpjIyMlDsXDIi33npr7ty5cmeBfjh37tzixYul144qkm8LIlFR//iSNX/+/AULFpSUlGg0mps3bzo6OnV1dXkSx2w2K5XKu0xGWk8kC5/kDyAo0GsJCCYPP/zwQP8Q9Lvf/e6nP/2pDwOmpqb6MFp/+fxy/eu//uvGjRt9GxNACGtqaqqpqblz547ciQAYcKdOnTKbzUePHs3KypJGDAZDRkZGfHx8ZWXlG2+84dhz3rx5hYWFQojGxsaysrKFCxc6NkVHR5eVlVkslqNHjz7++OPeZbJgwYItW7ZYLJba2trNmze7bO1Xr6X+8kn+AIIOpSUA3zIajQcPHnzqqae6b5KesuSFGzduuN/B68iy+OUvf1laWur+3goAcLBarUIIliwBAU6r1bqMOBpRO79w/On8wiE1NfWBBx4oKip67bXXpJFt27YtW7ZMo9GsWbNm0aJFjqMKCwtbWlq0Wu3YsWMPHDhQUFDgCLJ37968vLykpKQdO3aUlJT0mXn3PIUQBQUFNTU1SUlJ2dnZS5cudcnWarV6/ttbj/G7XxDHpv7mDyA0UFoCAkVZWZlSqVQoFAkJCbm5ucePH//e977n+eGvvvrqxIkT4+Pjhw4d+vzzzzc1NXmRw+7du/Py8hyruCV79+5NS0sbNGiQWq2ePn36l19+6diUlpamUCiGDx8uvX3ggQcUCsXQoUOltw8++KDzZ5HuzwpxE1na2WQyzZ07V6lUOj98RHh2rS5dutTb00m++uqruXPnpqWlpaWl5ebmXrx40cN5hRDR0dG5ubm0NwLgIem2F0pLQICrr693GbF/l/OI47X47vro8ePHV1dXnz59Oi0tTRrJycm5evXqnTt3ysvLR48e7ThKpVJt3bq1oaGhoaFh165djhvlpEPMZrPJZCotLR0xYkSfmXfPU4q/e/duk8n0l7/8RVrz7pznl19+ee7cOQ+vTI/xe7ssXuQPIDRQWgICRV5e3t69e+12e3Nz87Zt2wwGQ0NDg+eH/+AHPzh37tzt27f/8pe/qNXqnJwcL3I4fPiwYwm35Pjx43/84x8PHz58586durq6devWPfPMM//zP/8jbf3ss89mzJjx2WefSW9PnTo1Y8aMU6dOSW+rqqpcPnM4f6xxH1nac9WqVb/+9a87OzulX8Acx3pyrUaMGNHjL3JfffXV4sWLi4qKDAaDwWB47bXXlixZ4qguuZ9XMn369IMHD3p8UQGENZvNJigtAaHOZeUOAIQbSktAoBg0aFBsbOzt27cjIiJSUlIWLlzYr9LS9OnTpRcajebll1921Hf65a9//evYsWOdR15++eU333xz3LhxsbGxarX6Rz/60fbt29euXSttve+++7Zt27Z06dLa2lqDwbB06dJt27YNGzbMk7ncR5ZMmzZt6tSpCoUiJyfHYrE4xu/mWq1evfq3v/3t/fff7ziFl156afXq1Z7MK/n+97//t7/9zcPpAIQzm80mFawpLQGhrftPaAAQVnhCHBAoPv/88+XLl586deqee+753ve+FxsbW1xc7LxA2o3Ozs4tW7b88Y9/vH79+uDBg3/4wx969+Gmubk5ISHBeeTs2bOOKozD4MGDHa/vvffeP/zhD8uWLbPb7du3b3fcDdenPiMLIXprKH431+r48eO7du1yHsnMzHRZmuS+kXliYuKtW7c8mQuAXDo7O+vr61Uq1ZAhQ2RMQ7obLiIigrUMALym0+m6/4Sm1Wq738QHAHKhtAQEijFjxhw7dsx5ZNasWUeOHPHk2H/7t39LSUk5depUYmKixWK5du3aQw895EUOCQkJLS0tycnJjpHY2Nivvvrqvvvu6/PY3hob9cbzyN3dzbUSPT02rl+VuJaWlsTERM/3B+B/d+7c6ezsdOkc53/08AZw9yghAQh83BAHBK7y8nIP93z33XdXrlyZnJwcFRUVGxvr9a/03//+98+fP+88MmvWrD/96U9uDrl+/fpTTz1VUlKyY8eOX/ziF9evX3c/heN5cH1G7hfPr9U///M/f/75584jZ86ceeyxxzyfq6Ki4uGHH+5HcgD8LiEhQa/Xy14FprQEAADCAaUlIFCkpKQcOHCgublZenv69Ono6GgPjx0xYsQf/vCHtrY2o9G4e/fuhQsXepfDnDlzPvroI+eR/Pz87du3/+53v7t69arFYjEajR9++OGsWbOkrdeuXfvlL3/5X//1X6mpqWlpaSUlJb/85S+vXbvmHCE6Olp6yNqNGzeKi4sfeeQRTyK7dzfXavPmzevXrz99+nRXV1dXV9fp06dfeumlzZs3e3i4EOKjjz6aPXu25/sD8L+IiAi1Wu1yj63/UVoCAADhgNISECjuv//+1NTUX/3qV6mpqRMmTFiwYMHevXudd1B8w+W1EOKtt946evSoVqt9+OGHz58/v2/fPuHVY0oWL1783nvvOTeuTk9P/+yzz6qqqiZOnKhWqx955BHnXkWTJ0/+4IMPJk+eLL2dNGnSBx984CgeSaSHrEVEREyaNKmqqurw4cOeRHZ50orL27u5Vg899NA777yzadOmpKSkpKSkzZs379mzZ9SoUZ7MK4SwWCylpaWLFy/u77UFEIYoLQEAgHBAryUgUJw9e1YIsWfPnt52cNMPaNSoUcePH/dwZzeGDBmSk5Ozbdu2Z5991jGYlpbm0vfa4caNG85vq6uru++Tk5NjNpt7PNxNZJf8Xd7ezbUSQjz00EMHDx70Yl4hxB/+8IecnJykpCQ38QFAQmkJAACEA1YtAfiOF1988e2335Y7i8BVWlq6bt06ubMAEBwoLQHhxlePgxzox0q6id/fB7P0Nz6AkERpCcB3JCQkuHS5hrNPP/00ISFB7iwABAdKS0Cw0Ov1Ponj3bJxT+LExcX5JHJv8T3Z5JP4Lnx7XgDkQmkJAABgQFBaAoJFXV2d81tp5c6xY8e0Wm1GRobjESXSeEtLy7Jly+Li4latWuU4pLy8vPt6H4vFsmbNmlGjRo0cOfKFF15wtAjobxyNRmMymVzaRzriSM/JlQ4cOnSo+zPtMX5bW9uSJUvUavW4ceMqKipcDsnMzMzMzHQf1n18aaS4uDg9PV2pVEoPeHFzXgCCDr2WAAAABgSlpWDx4Ycfnj9/3osD7Xb76dOnnR9/gcB3+fLlrq4u9/vY7XaFQtHU1FRdXX3w4MHnn39+//79jvHc3NxFixYVFRWdO3fOccjMmTOlrc5x1q9fn56efvHiRSHE66+/vn79+ldffdWLOEajUaFQdF8KdObMmeeff37mzJlCiOzs7IyMjJKSEven1mP81atX6/V6o9F4+/bt7du3d78a7mP2GV8aqa2traysPHbsWF5enlRl6+28AAQdSksAAAADgtJSUHj00UelRR9esNlsH3744f/+7//6NiUMqNu3bzuqgWlpabW1tdJrqRqSmppqMBikkSeeeCImJiY7O3vZsmVmcdkwAAAgAElEQVTOEQ4ePKhWq4UQjz32mPu5du/efeHCBen1okWLxowZI5WW+hunN5MnT9br9fv378/NzS0tLX3wwQcffvhhL+K88847VVVVSqUyOTn5qaeecmkr6Vz5uhv5+flCiJycHKqxQOihtAQAAEJEe3t7c3NzXFxcIDTvsNls0k/xlJYC3J/+9Cevj42Ojv7tb387d+5cH+aDgXbu3LnFixdLrx1VJPdrZ6KivvOlSaoHechN2H7FcWY2m5VKpfR648aN8+bNmzVr1iuvvFJaWupdQJfgdx/E66kd5wUguFBaAr7V0dHxySefOH68AgLcuXPnTCaT3FkAAcRkMrW1tUVGRgZCaUlasqRQKCIiaG0JBKVTp0498cQTR48ezcrK8i7CokWLtm/fLrVS2rZt289+9jOvk4mOji4rK3vyySc/+eST/Pz8EydOSOOjR4+eMmXK7NmzJ02aNGLECO+CL1iwYMuWLS+//HJjY6PzuiqJ1Gjp7NmzXifvRm/nBSC4UFoCvlVfX/+f//mf/FqCYNHe3n7ffffJnQUQQO7cuSOEGDx4sNyJCMHdcEBQ0Wq13QdTU1MfeOCBoUOHvv/++9KIdNOco5GQ84okx6D0Qtr0u9/97sUXX5Raa//Lv/zLhg0bvIsjhNi7d29eXp5SqZw+fbpLQ6W1a9eOGTPm0qVLnpxpj/ELCgp+9atfJSUlPfDAA2+99dbrr7/uvIzLarV6XiLvMb7jfB1tmBzx3ZwXgCBCaQn41rBhw/Lz86dNmyZ3IoBHtm7d+sUXX8idBRAoLBaL2WxWKBQqlUruXISgtAQElfr6+u6D48ePr66udh5xc3dbj5uUSmVBQUFBQYEnO7vflJOT09utakeOHHn66af7fDacm/gqlWr37t27d+/ucZ8vv/zSk8hu4jsPuuzg5rwABBFKSwAAIBS0tbUJIQYNGhQgN6BFRkbGx8dHR0fLnQiAfnNZWRPIHKuEioqK5M0EQDijtAQAAEKBVFoKkCVLQohBgwYNGjRI7iwAeCPwK0oOQZQqgBAWED/rAQAA3A2bzdbe3i4CptESAMhFp9MputHpdHLnBSCUsWoJCCZuFma79Hr0eXwACGTt7e12uz0qKiomJkbuXABATj32jQKAAcWqJcAdvV7vMuLDB1pLTzLqFy+aPvoqvotAeLA3ADi0trYKIdRqtdyJAAAAhB1KS4A7dXV1zm81Go3JZHIsLXaMS2/Ly8uFEOXl5QqFQnpIhzR+7NgxrVabkZFx7do1af/GxsaJEyeqVCqdTvfss896UmOSwjpPKoRoa2tbsmSJWq0eN25cRUWFyyGZmZmZmZkenmmP8aWR4uLi9PR0pVJZVlbm/joAgCzsdrvUaInSEgAAgP9RWgL6wWg0CiHs33CMnzlzZvLkyTNnzhRCZGdnZ2RkHDlyRHyzCKipqam6unr16tXPP/+8tP+qVasKCwvNZvPly5cfe+yxVatW9Tn1zJkzuy8pWr16tV6vNxqNH3/88aFDh1y2uiTpRXxppLa2trKycu/evXl5ee6vAwDI4s6dOzabLSoqKjY2Vu5cAAAAwg69loAepKWl1dbWSq+lVTmpqakGg6G3/SdPnqzX6/fv35+bm1taWvrggw8+/PDDjq1PPPFETExMdnb2smXLpJFDhw7t3r3bsUNKSsqbb77pRZ7vvPNOVVWVUqlMTk5+6qmn1q1b57z13LlzXsTsLj8/XwiRk5NjsVh8EhA+dOLEiaysLLmzgF8ZjUY3/zkKTyaTSQTSs+EAIEDI2EbTJ21AAQQLSktADxxf29z/e2w2m5VKpfR648aN8+bNmzVr1iuvvFJaWtrj/lFR//gbN2HChI8++sinKQuz2ezbgP2a2nEd4GejR4/+9a9/LXcW8KsTJ05IN39BYrfbpdISd8MB8Jper79x48ZdBrlz547nD6mMi4uTmsQNXBzRz8pOv+btk91u96Rtgq+uAwCZ2QF8IzMz89ixY84j3f+OREdH79+/32w2l5eXT5061XnTz3/+86ysrJ///OcuEQ4dOtTZ2fnee+/Nnz9fGnzttde2b99eXV1ttVr7laFLPk8//fS6devMZrPBYFixYoXL1okTJ06cOPFu4ruMOL92cx3gN2+++eaiRYvkzgL+NmjQoGnTpsmdRQBpa2v7+9//fvnyZbkTQSB68cUXk5KSBi5+VFRUWVnZwMXHQDh79uxDDz3kMujyEai9vf25557TarX33HPPzp07R4wY4dhNCNHc3Lx06VK1Wv2b3/xGGm9oaMjIyBBCaLXaZ555pq2tzRHq2WefHTly5ODBgx9//PFPP/1UGkxKSurxG5mbOD3qLY7dbpeaM4huHQxee+01tVr92Wef7dixQ61W79+/v895Pf9IaTKZFi9erFKpfvjDH/7tb39znn1Ar4N7X331VXp6+t1EANAnei0B7mi1WpcRqeVQUlLSjh07SkpKnDetXbv2xIkTL730ksshqampDzzwQFFR0WuvvSaNPPfcc42NjVOnTtVoNNOnT9+0aVOfmTgaZjt3zi4oKKipqUlKSsrOzl66dKn4Zu2xRKpbeXimPcZ3jLj86f46AIA/BeaSpa6urkuXLl25ckXuRAB4Q/rprqKi4sqVKyqVSuoyKb5ZBJSbmzt16lSDwTBjxgxp3E0bzfz8/IsXL7a0tKxZs2bOnDnSYG9tK/vbjtNN+8vubTSlt1ardefOnbNmzaqoqNi5c6fUSdP9vN2D98ZNG9ABvQ4AZCfbzbdAAJo0aVJ+fv60adO8O7y4uPjKlStFRUXOgzLe4o6Qt3Xr1i+++MK5bxfCQWxs7COPPHLs2DG5EwkIdrv966+/tlqtaWlpAXXfhNlsvnbtWmRk5PDhw+XOJaytX79+69atjrqAz0VHR7///vtz584doPgYCOfOnVu8eHFlZaX4bntNidReU6/Xnz9/XqPRdD9coVC0tra6lLOHDBni/H+zlJSUhoYGIcSlS5dWrlx5+vTpzs7O8ePHnzx50vGxsMePiL3FccP9R02XrY63Li+8mLdHGo2mqqpKum5NTU3JycnSLH64Dm5cuHAhKyururra6wgA+sSqJcA3FArFc8899+///u8ug+K7K4kAAD7U3t5utVojIyMD7dlw0dHRw4cPv/fee+VOBIA7BoPBsV5GeiE13Ozq6nJzVPdlkhMmTHC+McRRB5k/f/6jjz761VdftbS0vPfee70FdHTM7C2Oh7zuvHmX8/aZjJ+vAwD/o7QE+EaPS5F7HAQA+Irj2XCBVsRXKBSRkZGOpzcACC7z5s0rLCwUQjQ2NpaVlS1cuND9/tnZ2Tt27KipqbHZbM7jBoMhIyMjPj6+srLyjTfecN4UHR1dVlZmsViOHj36+OOPu4/jRo9x+sv9vJmZmZmZmZ7EWbBgwZYtWywWS21t7ebNmx3jfrgOAORFaQkIFDqdTtGNTqeTOy8ACFyB2WgJQNBxaa9ZWFjY0tKi1WrHjh174MCBgoICady5MaVzRbu3Nprbtm1btmyZRqNZs2bNokWLRF9tK71ox9lb+8vubTRdVtN7kr/E8/advbUB9cN1ACAvusAA37rLXkuAn9FrKTzRa8mhvb29pqYmIiJi+PDhgbZqCQGCXkvozrnXEsIBvZYAP2CdNgAACEoxMTH33HOP1WqlrgQAACAjSksAACAoRURExMXFyZ0FAABAuKPXEgAAAAAEKNpxAgh8rFoCAAAAgABVX18vdwoA0AdWLQG+NND9PgYivssjTgaUryZyE8efp+O1wM8QAAAAADxEaQlwR6/X92v/u3/kovu+If2Kf+fOHU926zNmj3G862/iq0dSuonTfZOH10Hin74tnl8H+sgAQcpoNBqNRqvVKnciAAAAA47SEuBOXV2d47W0HKaoqCguLu706dMlJSVxcXFlZWXS1vLy8u7rZaSR4uLi9PR0pVLp2Lk3Go3GZDI57qJ33tQ9vpt8GhsbJ06cqFKpdDrds88+60lt5fr165MnT05KSlq6dGlbW5s02FscN3n2pl/Xp6OjY8WKFTqdTq/X79q1a+TIke7jtLW1LVmyRK1Wjxs3rqKiwjHeW/69zdvbeZWVlSmVSoVCER8f/+ijjzrnI4TIzMzMzMz05CL09zp4cZ0BBIjm5uampiZKSwAAIBxQWgI8Ja00sVqtO3funDVrVkVFxc6dO/Py8qStM2fO7L4URRqpra2trKzcu3evY+feGI1G6SiJ86bu8d3ks2rVqsLCQrPZfPny5ccee2zVqlV9nt2uXbv27dt3+fJltVr9wgsvSIO9xXGTZ2/6dX3WrVtnNpsrKiquXLmiUqmk6dzEWb16tV6vNxqNH3/88aFDhxzjveXf27y9ndeiRYuefPJJi8VSV1f3m9/8pqWlxeUsPF+F1K/r4MV1BhAI7Ha7zWYTQkRGRsqdCwAAwIBT8HUFcJg0aVJ+fv60adPS0tJqa2udN6WmphoMBoXiH39lur+QuLx1Gem+tTv3+/Q2ncuLIUOGOJdjUlJSGhoa3E9aU1OTlpYmhDAajaNHj5b2dxPHk3Px5Ox6vD56vf78+fMajcbDOBqNpqqqStq/qakpOTlZ2uph/n3+b3To0KGf/OQnFoslOTk5JSVl9+7dEydO7O+5u8m/v/k4bN269Ysvvti9e/fdJIOgExsb+8gjjxw7dkzuRGRjt9sDfB2f1Wq9cuWKEOLBBx8M8FRD3vr167du3er8b4FvRUdHv//++3Pnzh2g+BgI586dW7x4cWVlpdyJ3C3pPy/++Tbn3Qe/AHHhwoWsrKzq6mq5EwFCGauWgB4YDAbHOhHphcFg8H8aZrPZuwMnTJhgd+K+ruTCZrNFRET0K47Xefamq6vL62Odk7mb6+Acavbs2Waz2WQy/fnPf/7Zz372xBNPeJ3e3fD5dQaC1PXr12tra+/mPxQDTVqyxK2sQBDpb3vNHvmqvaOv2mX6EG0iAbhHaQkILNHR0WVlZRaL5ejRo48//rh3QbKzs3fs2FFTUyN9vfHE9u3ba2pqmpubN2zYMH/+/D7j+CTP3sybN6+wsFAI0djYWFZWtnDhQvf7L1iwYMuWLRaLpba2dvPmzY5xL65Dj+eVkpJy9uzZiIiIoUOHjh492tGLStKvXkv9NaDXGQhGHR0dZrO5vb09kO814244IOg4t9cUvbd9lErGLS0ty5Yti4uLc9xr76bN5fLly0eNGqVSqbKyso4fPy4N9tZO0VftMqWw5eXl4ps+j0OHDnUcQptIAD5HaQlwR6vVOl5L/0A6/pns8Z9Y8d2fqZ0PcTm8N1KrnaSkpB07dpSUlLiJ7yaf5557rrGxcerUqRqNZvr06Zs2bXIzo3TgkiVLcnNzhw8fbjKZHPu7idNbnm5m8fz6FBYWtrS0aLXasWPHHjhwoKCgwH2cgoKCmpqapKSk7OzspUuXOuL0lr+b/116PK/777////7v/0aOHKlQKPLy8vbu3et8alar1fOf8vr7/5P+Xmcg5A0aNGjYsGE6nS6Qv7RI3bsdK0ABBJ3e2j5K/+Ln5uZOnTrVYDDMmDFDGnfT5jI/P//ixYstLS1r1qyZM2eONNhbO0Vftcs8c+bM5MmTZ86cKYTIzs7OyMg4cuSI4xDaRALwuSC+aRbwOUevJbkTATxCr6XwRK+lwGcymW7cuDFo0CDnZQKQxfr16zdt2vTDH/5wgOL/+c9/Hj58eGJi4gDFx0Boa2trb2+/evWqEKK39ppu2j4qFIrW1la1Wu082Ft7x0uXLq1cufL06dOdnZ3jx48/efKk+3aKvmqXKYTIzc1duHBhbm7uvn37SktL9+zZ4/6yuOerNpGyoNcS4AdRcicAAAAQUqQb4li1FAhGjRr1/e9/3/3q3bsxY8aMn/3sZ//0T/80QPExEC5evPj6669Lrx3NNF0KIu67ubnUlYQQEyZM+Oijj7rvOX/+/AULFpSUlGg0mps3b/bW0clsNiuVSjdxPOHcLlMIsXHjxnnz5s2aNeuVV14pLS31LuZdcpwXgJBHaQkAAMCXpBvi6LUUCBISEjQazcD1qlMoFD/4wQ/ohRdcEhISoqL6+BIktX3cuHFjY2PjqVOnSktL3377bTf7S+0dZ8yYkZqa6lzfMRgMGRkZ8fHxlZWV7777rvMhUjvFJ5988pNPPsnPzz9x4oSbOG5s37795z//uUqlcm6XKYQYPXr0lClTZs+ePWnSpBEjRjgfIjVaOnv2rCfx+6vH8wIQ8vg9DfA3qUWIC51OF+zzynVeABBoWLUEBB3n9pqi97aPzg0TPWlzuW3btmXLlmk0mjVr1ixatEj01U7RV+0yJWvXrj1x4sRLL73kciBtIgH4HKuWAH+rr68PyXnlOi8ACDSUloCg4/IxRqVSbd26devWrS679VaRiYyMXLt27dq1a13Gc3JycnJyejw8JyfHbDZ7GKdHjmi9rT86cuTI008/3b3p25dffulJfJdZeht02aHH8wIQ8igtAd+qra1dunSpSqWSOxHAI83Nzffff7/cWQBwJZWWuCEOgIwcy4iKiorkzQRAOKC0BHxLpVL9v//3/x544AG5EwE88vnnn7e1tcmdBQBXUq8lVi0BkFGgPaYNQGijtAR8KyEhYcGCBdOmTZM7EcAjW7du/eKLL+TOAvCH9vb22NhYubPwFDfEAfAhnU7X0NDgMqjVaulFACBwUFoCAAAB7c6dOwaDISYm5t5775U7F49QWgLgQ5SQAAQ+SkvAdxw5cqSqqkruLACPfPbZZ30+PhkIAS0tLUKIIFq1JN0QR68lAAAQJvhOAnzrscceq6qqqq6uljsRwFNTpkyROwVgYFksFqmnWEJCgty5eIpVSwAAIKxQWgK+tXHjRrlTAAB8x61bt4QQgwcPViqVcufiKUpLAAAgrPChBwAABCi73X779m0RhEuWBDfEAQCAsEFpCQAABKjW1lar1RoVFaVSqeTOxVNSoyWFQqFQKOTOBYCPBd1fbRmzDbprBeBuUFoCAAABqrm5WQiRkJAQRN9PIiMjtVptcnKy3IkA6Ae9Xu/Jbna7faAzEULcuXPH853j4uLcbO1Xwv2at08eTu0mf9/mA2BAUVoCAACBqK2tzWw2R0REJCYmyp1LP0RERCQkJARXzgDq6uqc33Z0dKxYsUKn0+n1+l27do0cOdJ566effpqenq5UKsvKyhyDy5cvHzVqlEqlysrKOn78uDQordwpLi522f/OnTu/+MUvkpKSxo8ff/HiRccCn8bGxokTJ6pUKp1O9+yzz/ZZW9FoNCaTSfEN503l5eUug9LboqKiuLi406dPl5SUxMXFSSm5nzczMzMzM9OTy9jW1rZkyRK1Wj1u3LiKigrnTT1en97y7+91ACA7SksAACAQOZYs0Q8bgJ+tW7fObDZXVFRcuXJFpVIZjUbnrUePHr148eLevXvz8vIcg/n5+RcvXmxpaVmzZs2cOXOkQWnlTm1tbWVlpfP+q1ev1mg0dXV1J0+e/OCDDxx7rlq1qrCw0Gw2X758+bHHHlu1apX7PKXE7N9w3jRz5kyXEemt1WrduXPnrFmzKioqdu7cKaXkft7uwXuzevVqvV5vNBo//vjjQ4cOOW/q8fr0ln9/rwMA2Sn8s6oTAAD4RGxs7COPPHLs2DG5ExlY7e3tNTU1CoXivvvui4rigbbw0sGDB19//fWB+/sSHR39/vvvz507d4DiYyCcO3du8eLFlZWVQoi0tLTa2lrnrampqQaDQa/Xnz9/XqPRdD9coVBYLBbpv0sKxT++TF26dGnlypWnT5/u7OwcP378yZMnHV+yHPs4v9ZqtRcuXJDiNzY2arVaaXzIkCHOZayUlJSGhgb3p+Mcv8+tjrcuL7yYt0cajaaqqko6r6ampuTk5H5dHwdf5SO5cOFCVlZWdXW11xEA9ImfAQEAQMCRlizFxcVRVwIwcAwGg2O9jPTCYDAIIbq6utwc1f2/S/Pnz3/00Ue/+uqrlpaW9957r895nW/+ci6sTJgwwe6kv/UUs9ncr/19NW+fyXh4fRyHDEQ+AAYUpSUAABBYzGZzW1ubECIpKUnuXACEo3nz5hUWFgohGhsby8rKFi5c6H5/g8GQkZERHx9fWVn5xhtv9Bk/Ly+vqKjIZrOZTKYdO3Y4xrOzs3fs2FFTU2Oz2TxMNTo6uqyszGKxHD169PHHH/fwKBfu5/W819KCBQu2bNlisVhqa2s3b97sGHdzfXrM34vrAEBelJYAAEBgkZYsqVQqpVIpdy4AwoJWq3V+W1hY2NLSotVqx44de+DAgYKCAmlcWm3U/c9t27YtW7ZMo9GsWbNm0aJFbvaU/ty0aVNdXV1ycvKjjz46e/Zsx7zPPfdcY2Pj1KlTNRrN9OnTN23a1GfmUgunpKSkHTt2lJSUOMYdjbGdXwinBVPOK6fcz2u1Wj1solJQUFBTU5OUlJSdnb106dI+r09v+XtxHQDIi15LAAAEk5DvtdTV1XX16lW73Z6enh4bGyt3Oghu9FpCd869lmRnsVgOHz68fv368+fPy51LyKLXEuAHrFoCAAABpKWlxW63x8bGUlcCEMJefPFFhUKhVqv/+Mc/fvrpp3KnAwB3hdISAAAIFDab7datWyKYuyxZrVaLxUJ/EADubdiwwW63d3Z2lpWV6XQ6udMBgLtCaQkAAASKW7du2Ww2pVKpUqnkzsVL9fX1V69ebW1tlTsRACFCp9MpuqEaBSCg8EBfAAAQEOx2e0tLixAiMTFR7lzuikKhiIjg1zsAvlFfXy93CgDQB0pLAAAgIHR0dFit1qioqPj4eLlz8V5qaqrcKQAAAPgVpSUAABAQYmNj77vvvq6uLudHYgMAACDAUVoCAACBIioqKiqKDycAAADBhEYAAAAAAAAA8BKlJQAAAADom/R0Nrmz+Ad/JhM4Zw0gMFFaAgAAABDW9Hq9J7vZ7faBzkQIcefOHU92808y/Z0rLi5uQDMBEJgoLQEAAAAIa3V1dc5vOzo6VqxYodPp9Hr9rl27Ro4c6bz1008/TU9PVyqVZWVljsHly5ePGjVKpVJlZWUdP35cGpQWFhUXF7vsf+fOnV/84hdJSUnjx4+/ePGiY/1RY2PjxIkTVSqVTqd79tlnPakxXb9+ffLkyUlJSUuXLm1ra3Oet7y8XAhRXl6uUCiGDh3qOCQzMzMzM9PDKyMd7rJqqbfz0mg0JpNJ8Q0PpwAQAuiUCQAAgJBlNBo/+eSTAQput9v/8pe/qNXqAYqPgXDx4sWuri73+6xbt85sNldUVKjV6sOHDxuNRuetR48evXjx4kcffZSXl2c2m6XB/Pz84uJii8Vy4sSJOXPmtLa2CiHsdrtCoaitra2srDx27Jhj/9WrV2s0mrq6uq6urh07dohvlgWtWrWqsLDwkUce6ezs/Pjjj1etWvXmm2+6T3XXrl379u0bPHjwyy+//MILL0j7nzlz5vnnn585c6YQIjs7OyMjo6SkxHFIv5Y7zZw5UzoL58HezstoNCoUCn8upwIQIPibDwBAMImNjX3kkUeOHTsmdyJAEDhz5sxLL700cPGPHTv28MMPp6SkDNwU8Lnbt283NDR8/fXXQoi0tLTa2lrnrampqQaDQa/Xnz9/XqPRdD9coVBYLBbpWZaOMsqlS5dWrlx5+vTpzs7O8ePHnzx50vEly7nU4nit1WovXLggxW9sbNRqtdL4kCFDnMtYKSkpDQ0Nbs5FoVDU1NSkpaUJIYxG4+jRox375+bmLly4MDc3d9++faWlpXv27PHqan07kcvXxh7Pq8c9ZXfhwoWsrKzq6mq5EwFCGauWAACAPMxmc21trUajiY+PlzsX3zCbzUajMTo6esiQIXLnAiGEmDJlyscffzxw8aOjo19++eW5c+cO3BTwuXPnzi1evFh6bTAYpBcuBRH3y5qkupKz+fPnL1iwoKSkRKPR3Lx5s8/OTc6LgJznnTBhwkcffeTBSfTAZrNFRHzb7WTjxo3z5s2bNWvWK6+8Ulpa6l3Mu2Q2m5VKpSxTA/Azei0BAAB53Lp1y2KxmEwmuRPxma6urtbWVke7EwBBat68eYWFhUKIxsbGsrKyhQsXut/fYDBkZGTEx8dXVla+8cYbfcbPy8srKiqy2Wwmk0m6IU6SnZ29Y8eOmpoam83mYarbt2+vqalpbm7esGHD/PnzHeOjR4+eMmXK7NmzJ02aNGLECOdD+tVrqb+io6PLysosFsvRo0cff/zxAZoFQKChtAQAAOSRnJycnJwcSgt8pG+DNK8Fgo5Wq3V+W1hY2NLSotVqx44de+DAgYKCAmlc+tvd/c9t27YtW7ZMo9GsWbNm0aJFbvaU/ty0aVNdXV1ycvKjjz46e/Zsx7zPPfdcY2Pj1KlTNRrN9OnTN23a5CZnKdSSJUtyc3OHDx9uMplc9l+7du2JEye63xNqtVo9v2fN0ZDbuTN3b+clhNi7d29eXl5SUtKOHTucGzwBCG0BdyssAABwg15Lgay1tbWuri42NjY9PV3uXOAP0dHR77//PjfEBRfphrjKykq5ExFCCIvFcvjw4fXr158/f97nwYuLi69cuVJUVOTzyMGFXkuAH9BrCQAAwDekX+yc250AQI9efPHFjRs3KpXKmTNnfvrppz6P71hGRGkJgB/w0QcAAMA3uCEOgIc2bNhgt9s7OzvLysp0Op3P49u/4fPIANAdpSUAAADfkL7FUVoC4EM6nU7RzUBUowDAa9wQBwAA4BvcEAfA5+rr6+VOAQD6QGkJAADAN7ghDgh8VVVVV65ciY+PlzsR+A83BgIDjdISAACAb7BqCQh8aWlp99xzT2lpqdyJwE+uXr26fPlyubMAQhylJQAA4A92u726unrw4MEajSZUiy/0WgICX2xs7ODBgydMmCB3IvATlUoVGRkpdxZAiAvND3YAACDQtLS0dHZ2tra2hnDlhRviAABAGGLVEtWznC4AACAASURBVAAAGHBdXV1Go1EIMWTIkBCuvHBDHBAUDAbD/Pnz5c4CftLa2ip3CkDoo7QEAAAGXGNjo81mGzRoUGi3zmXVEhD47rvvvoKCArmzgF8tXLhQ7hSAEEdpCQAADCyTyWQymRQKhU6nkzuXgUWvJSDwpaSkPPXUU3JnAQAhhQXbAABgANlstsbGRiFEUlKSUqmUO52BxQ1xAAAgDPHRBwAADKCmpqauri6lUqnRaOTOZcBxQxwAAAhDlJYAAMBA6ejouHXrlhAiJSUlHAou3BAHAADCEKUlAAAwIOx2e319vd1uj4uLGzx4sNzp+AM3xAEAgDDERx8AADAgmpqazGZzZGRkSkqK3Ln4CTfEAQCAMERpCQAA+F57e3tzc7MQQqvVRkZGyp2On7BqCQAAhKEouRMAAAChxm63NzQ0CCHUarVarZY7Hf9JTU0VQoRPKQ0AAEBQWgIAAD5nNBrNZnNERET43AonCZOWUgAAAM5YsA0AAHypo6PDcStcVBQ/YgEAAIQ4SksAAMBnbDZbXV2d9FS4uLg4udMBAADAgKO0BAAAfObmzZsWiyUqKkqr1cqdCwAAAPyB0hIAAPANk8l069YtIcQ999zDU9IAAADCBB/7AACAb7S3twshEhMTY2Nj5c4FAAAAfkJzTQAA4BspKSmDBw/mKWkAAABhhdISAADwGZVKJXcKAAAA8CtKSwAAAD5gs9k6OjoUCgX3AwIAgLBCryUAAAAfMJvNBoOhrq5O7kQAAAD8ilVLAAAAPqBQKGJiYqKi+HAFAADCC59+AAAAfCAmJubee++VOwsAAAB/44Y4AAAAAAAAeInSEgAA6Der1Xrt2rXW1la5EwEAAIDMKC0BAIB+a2lpMZvNTU1Ndrtd7lwAAAAgJ3otAQCAfhsyZIgQQq1WKxQKuXMBAACAnCgtAQAAb0jVJQAAAIQ5bogDAAAAAACAlygtAQAAAAAAwEuUlgAAAAAAAOAlei0BAAD4gMlkMhqNgwcPTk5OljsXAAAA/2HVEgAA6IPNZpM7hSDQ1dXV2dlpsVjkTgQAAMCvKC0BAAB3Wltbr1692tHRIXciAAAACESUlgAAQK86Ojrq6+utVmtra6vcuQAAACAQUVoCAAA9M5vNtbW1drtdrVanpKTInU5wUCgUcqcAAADgV5SWAABAD6xWa21trdVqjYmJ0el0cqcDAACAAEVpCQAAuLLZbAaDwWKxREdHp6amRkTwgQEAAAA945MiAAD4Dqmu1NnZGRkZmZaWFhUVJXdGAAAACFyUlgAAwLfsdntdXV1HR0dERERaWlp0dLTcGQUNu90udwoAAAAyoLQEAAC+dfPmzba2NoVCcc8998TExMidDgAAAAIdpSUAAPAPRqOxpaVFCJGSkqJSqeROBwAAAEGA0hIAABBCiObm5qamJiFEcnJyQkKC3OkAAAAgONCYEwAAiObm5ps3bwohUlJSEhMT5U4HAAAAQYNVSwAAhLtbt25JdaUhQ4ZQV7pLCoVC7hQAAAD8itISAABhrbW1tbGxUQiRmJio0WjkTgcAAABBhhviAAAIX62trXV1dUKI+Pj4lJQUudMBAABA8KG0BABAmLp9+3Z9fb0QIiEhQavVyp0OAAAAghI3xAEAEKYsFosQIj4+nrqST9jtdrlTAAAAkAGrlgAACFNDhgyJiYlRq9VyJwIAAIAgxqolAADCF3UlH+LZcAAAIDxRWgIAAPAZbosDAADhhhviAAAAfCA+Pn7w4MEREfxuBwAAwgulJQAAAB+IjIyMjIyUOwsAAAB/44c1AABCnN1u7+zslDsLAAAAhCZKSwAAhDK73X7jxo2ampqOjg65cwEAAEAIorQEAECIs9vtdrvdarXKnQgAAABCEL2WAAAIZQqFQq/XWyyWmJgYuXMBAABACGLVEgAAIS4iIoK6EgAAAAYIpSUAAAAAAAB4idISAAAAAAAAvESvJQAAAB/o6upqa2uLjIxUq9Vy5wIAAOA/rFoCACAU2Gy2+vr6rq4uuRMJX2azuaGhoampSe5EAAAA/IpVSwAABD2z2Xzjxg2z2WyxWNLT0+VOJ0xFRkYOHjw4KooPVwAAILzw6QcAgOBmMpnq6+ttNptSqdTpdHKnE75iYmLS0tLkzgIAAMDfKC0BABDEbt682dzcLIQYPHiwXq+PiOBWdwAAAPgVpSUAAIKS1FzJZDIJIRISElJSUhQKhdxJAQAAIOxQWgIAIPg4mispFIqUlJSEhAS5MwIAAECYorQEAECQsVqt169ft9vt0dHRer0+JiZG7owAAAAQvigtAQAQNOx2u91uN5vNdrt98ODB99xzT2RkpNxJAQAAIKxRWgIAIDh0dXXV1dVJr5OSkoYMGUJzJQAAAMiO0hIAAEGgra2tvr7earUKIZRKZXJystwZAQAAAEJQWgIAIMDZ7fb6+vrW1lYhRGxsrEKh4CY4AAAABA5KSwAABC7Hk+CEEBqNRqPRyJ0R3Ll27Zrdbk9PT4+K4iMWAAAIF3zuAQAgQLW2tjY0NNhstsjISJ1Op1Kp5M4Ifejq6rLZbDabTe5EAAAA/IfSEgAAAcput9tstkGDBun1elbBBIWIiAhKSwAAINzwORUAgAAVHx8fERGhUql4ElywiIiIEELY7Xa5EwEAAPAfSksAAAQutVotdwroB6kIyKolAAAQViLkTgAAACBESKUlVi0BAICwQmkJAADAN7ghDgAAhCFKSwAAyKmjo6OpqUnuLOAb3BAHAADCEL2WAACQTVdXV01Njd1uHzRokEqlkjsd3C1p1RKlJQAAEFYoLQEAIJuoqKjExESbzRYbGyt3LvABbogDAABhiNISAABySk5OljsF+AxtvAEAQBii1xIAAIBv0GsJAACEIUpLAAAAvsENcQAAIAxRWgIAYGDZ7fZbt27JnQX8gVVLAAAgDNFrCQCAAdTe3t7Q0GA2m4UQCQkJcqeDgcWqJQAAEIYoLQEAMCCsVuvNmzdv374thIiMjJSKDght0v/KrFoCAABhhdISAAA+ZrfbW1pajEajVGKIj49PTk6OjIyUOy8MOKm0ZLVa5U4EAADAfygtAQDgSyaT6ebNmxaLRQgRExOTkpISGxsrd1LwE1YtAQCAMERpCQAA32hvb79582ZHR4cQIjo6OiUlRaVSyZ0U/Epam8aqJQAAEFYoLQEAcLcsFktjY2NbW5sQIiIiYsiQIQkJCdLDwhBWWLUEAADCEKUlAAC8Z7PZmpqabt26JT0ULDExUaPR0FYpbDn+p7fZbDRuBwAAYYLSEgAAXpJ6dUt3P6lUquTkZKVSKXdSkJNCobjvvvsiIiKoKwEAgPBBaQkAgH7r6OhobGx0tFVKTk5Wq9VyJ4WAEB0dLXcKAAAAfkVpCQCAfujq6mpoaHC0VdJoNImJibRVAgAAQNiitAQAQD9ERES0t7cLIeLj45OTk2mrBAAAgDBHaQkAgH6IiIjQ6XRKpZK2SgAAAICgtAQAQH/RVgkAAABw4PElAAAAAAAA8BKlJQAAvsNqtTY1Nd26dUvuRAAAAIAgwA1xAAB8R1tbm9FojIyMjIuLi4jgNxgAAADAHUpLAAB8R3x8fFtbG3UleMdsNptMpqioqPj4eLlzAQAA8AdKSwAAuNLr9XKngGBlNpubmpoGDRpEaQkAAIQJSksAAAA+o1QqExISlEql3IkAAAD4CaUlAEDYaWtra25u1ul00dHRcueCUKNUKrVardxZAAAA+A+lJQBAuLDb7a2trc3NzWazWQjR0tKSkpIid1IAAABAcKO0BAAIfTab7fbt283NzV1dXeL/s3enQW7ehR3Hn1PSo3ulvS/bcchBSAqx4xCTEChTGJwCISUMCZ02pcNQYDIBBkoKmZAyQCmlpOUNneEo04NyTTjSOKFDKWByYkOOEmrHib323rs6Vreesy+eRCjrlVZe7+6j4/t54ZGeffbRTxt7I/30PwRBFMVYLNbX1+d1LgAAAKDjUS0BALqZYRjZbDaXy9m2LQiCJEnxeDwej8uy7HU0AAAAoBtQLQEAulOpVMpms8Vi0b2rqmo8Ho9Go5IkeRsMAAAA6CZUSwCArmLb9srKysrKimEY7pFwOByPxzVN8zYYAAAA0JWolgAAXULX9Ww2m8/n3blvsixHo9FYLMY2cAAAAMDWoVoCAHS8YrGYzWZLpZJ71+fzxePxSCTC3DcAAABgq1EtAQA6mGVZMzMz1WrVvatpWjweD4fD3qYCHMdxHIdyEwAA9AKqJQBAB3M3ehNFMRKJxONxv9/vdSJAyOfz8/PzmqaNj497nQUAAGDLUS0BADrb0NCQoihuxwS0A/dvo2VZXgcBAADYDlRLAIDOxkgltBtFUQRBME3T6yAAAADbgSUAAABtLZvNTk1Nlctlr4MArXJHLdm27TiO11kAAAC2HNUSAKCtVatVXddzuZzXQYBWybIsiqLAwCUAANAbmBAHAGhr7uLc0WjU6yDAWZBl2TRNy7JUVfU6CwAAwNaiWgIAtDW/389qSug4iqKYpsmoJQAA0AuolgAAnnEcp1gs5nK5YDAYj8e9jgNsGjaJAwAAvYNqCQDggXK5nMvlCoWCbduCIJimSbWEbsImcQAAoHdQLQEAtk+5XM7n84VCoTaaw11HKRwOexsM2FyMWgIAAL2DagkAsOVM08zn8/l8vlqtukckSYpEIpFIRNM0b7MBW4FRSwAAoHdQLQEAtoppmoVCoVAolMtl94goisFgMBqNhkIhd3d2oCu5G8MZhuF1EAAAgC1HtQQA2GSGYbiNUqVSqR0MBALuMCV3ohDQ3aiWAABA76BaAgBsDtM03ZW5a7PeBEHQNC0cDofDYXd+ENAj3L/wjuNYlkWdCgAAuhsv9AEAm0PX9VQqJbww6y0cDodCId5UozeJoqgoimmahmHwrwAAAHQ3qiUAwOZwByi5pRLvpQFVVd1qKRAIeJ0FAABgC1EtAQDOQpPZPaIojoyMbHMeoG2xSRwAAOgRVEsAgJaUy+W5uTlVVScmJrzOAnQAVvIGAAA9gmoJANASVVUty3Icx7ZtSZK8jgO0O3fUEtUSAADoelRLAICWKIoyMTHh9/tFUfQ6C9AB3FFLTIgDAABdj2oJACA4jlMqlYrFoiiKAwMDjU5jNWKgdaqq+v1+t2ACAADoYlRLANC7DMMovcC2bUEQJEnq7+9nXBJw7lRVnZyc9DoFAADAlqNaAoDeYtt2uVx2xyjVrwKjKEooFAqFQh5mAwAAANBxqJYAoCdUq9VisVgqlSqViuM47kFRFAOBQCgUCgaDfr/f24QAAAAAOhHVEgB0LcMwisVisVisVCrufDeX3+8PBoOhUCgQCDD3DQAAAMC5oFoCgG5TrVbz+XypVKpWq7WDkiQFX8C6wgAAAAA2C9USAHSbSqWSyWQEQRBFUdM0d4CSz+fzOhcAAACALkS1BADdJhQKRaPRUCikaZosy17HAQAAANDNqJYAoMMUCoVcLheJRCKRyJonKIoyNDS0zakAAAAA9CbJ6wAAgLPj7vVWLBa9DgIAAAAAjFoCgE4TCoVqfwJocwsLC8VicWhoiH+zAACgW1EtAUBbcBynUqlUKpVyuVypVIaHh4PB4JpnBgKBQCCwzfEAbIxt25Zl6bpOtQQAALoV1RIAeMa27XK57HZJlUrFcZzal8rlcqNqCUAHSSQSiURCVVWvgwAAAGwVqiUA2FZunVQbnVRfJ4mi6I5I0jRN0zQPQwLYLH6/3+sIAAAAW4tqCQC2nK7rtdFJhmHUf0lRFO0FPp/Pq4QAAAAAsDFUSwCwJWzbzufz7uikNeskd3QSIxoAAAAAdDSqJQDYEo7jLC4u1u76fD53aFIgEGDVFQAAAABdg2oJADbItm3bthVl7V+ksixHo1FFUdzlk2RZ3uZ4AAAAALANqJYAYCNyudzCwkIoFBodHW10ztDQ0HZGAgAAAIDtJ3kdAAA6krvktmmaXgcBAAAAAC8xagkAXsSyrGq1WqlUqtVqNBoNhUJrnub3+3ft2tVoNhwAAAAA9AjeFAHodbquu0WSy7bt2pcURWlULYmiSK8EoEW5XE7X9UQiIUkMGAcAAN2G90UAeo5lWbUuqVKpnDmpTVVVv98fCAQ0TfMkIYAuk0qlTNMMhUL8VgEAAN2HaglA9zNNs1YkVavVJl2S3+/3+/3s5gZgc/l8PtM0dV2nWgIAAN2HaglANzMM4/Tp05ZlrTpe3yUFAgGmqADYUn6/v1Qq6brudRAAAIDNR7UEoJspiuKunaSqam1QEl0SgG3m7ilZrVa9DgIAALD5qJYAdLB8Pp9Op4PB4MDAwJoniKI4MTGhqipdEgAP+f1+gWoJAAB0KaolAJ1N1/XmtZH7jg4APOTz+URRtG3bMAxVVb2OAwAAsJmolgC0HcuyqtWqruu6rler1YGBgUAgsOaZwWBwdHSU8ghAmxNF0efzufsJUC0BAIAuQ7UEwGOWZVUqFbdF0nXdMAx3daSaarXaqFqSZTkUCm1LTAA4J36/362WwuGw11kAAAA2E9USgG3lOI5hGG6LVOuSzjxNVVWfz+f3+30+H3t1A+gCLLcEAAC6FdUSgC2n63qxWKzNcXMcZ9UJsiy7LVKtTmLVbQBdhmoJAAB0K6olAFtO1/Xl5eXa3VqR5Pf7/X4/27cB6AVutWSapmVZsix7HQcAAGDTUC0BOFeZTKZUKiUSiUYz1/x+fzgcrtVJLGELoAdJkqQoimma1Wo1GAx6HQcAAGDTUC0BOFeVSqVUKgWDwUbVkqqqIyMj25wKANpNIBAoFApUSwAAoMtQLQFYg2mahmHoLzBNc8eOHY1OjkajTXolAIDLrZYqlYrXQQAAADYT1RLQ6xzHcbdpc1sk94Zt26tOa7I4SCgU2vqYANDxAoGAIAhUSwAAoMtQLQG9xTAMtzyqdUmmaa55pqqqPp/P/dPv97PSNgCco9pK3qZpKgqvwQAAQJfgZQ3QK+bn5wuFguM4Z35JlmW3Qqp1SaqqiqK4/SEBoItJkuTz+XRdr1arVEsAAKBr8LIG6AaO41SrVdM0w+Fw89NEUawfjuT+yTbYALA9AoGAruuVSoWpxAAAoGtQLQHdwDCM06dPi6J4/vnnNzonmUwmk0lFURiOBABeCQQCuVyO5ZYAAEA3oVoC2pdt2+6iSO66SKFQKBKJrHmmqqqKovh8Ptu2Gy2KpKrqVoYFAKzPXW5J13WvgwAAAGwaqiWgLViWVb/AtsuyrPpzJElqVC2Jorhr165tSQoA2Di/3z85Oenz+bwOAgAAsGmoloBt5TiOaZrGGWzbXvN8RVHUF2iats1pAQCbSxRFd+ASAABA16BaArZPuVyenp5u9FW3RXKX1q5pNLsNAAAAAIB2QLUEbJpisVgqlcLhcKPhRe5W06Io+ny++uFILlbXBgAAAAB0HKol4CyYpunWQ2sqFAq5XE6W5UbVkqqq5513nizLWxYQAAAAAIBtRbUErMFdDqm2KFLtriAIu3fvbjS8KBgMSpIUCASaXJleCQAAAADQTaiW0NMaVUiO46x5viiKlmU1GrgUiUQa7eAGAAAAAEBXolpCz0mlUpVKpXmFJNRtzVa/KFKT2XAAAAAAAPQg3iejq9i2XalUHMcJhUKNzqlUKqVSqXZXluX65qh2g0W1AQAAAABYF9USuoqu6zMzM4qi7Nq1q9E5sVgsFAqxLxsAwEOpVKpYLA4MDDTa+QEAAKBTUC2hfVmWdeZaSKZpJpPJWCy25reoqurz+VRVbXLZcDi8NXkBAGiVYRjVarVUKlEtAQCATke1BI+5/VE9wzAsyzIMo9FCSO5ObWuSZXnHjh1bFhYAgM0Ri8XC4TC9EgAA6AJUS/BAsVjMZrNui9RkIW1BEBRFcdc/WvXntkUFAGArUCoBAICuwVt0bL5CoaDrejQabdQB2bZdv5C20hgLIQEAAAAA0M6olnB2bNs2TdNxHL/f3+icVCql63ogEGhULWmaNjw8TH8EAAAAAECno1rCGs5c/6jGtm1BEAKBwMTERKNvD4fDpmnKstzoBEVRIpHIlkQHAAAAAADbiGqpdzUqj9xBSU2+URTF5ickk8nNDgsAAAAAANoR1VKPsm37xIkTTU6QJKnR+kdNhiMBAAAAAICeQrXUnTKZTDqdjkajAwMDa54gvWDN5khVVdY/AgAAAAAA66Ja6gCO46w5bW10dLTRACJRFN31tptcdvfu3VuTFwAAAAAA9AqqpXax7srZZ2qyVHYkEgkGg402aAMAAG1iZWWlWCwODAyoqup1FgAAgI2gevBSKpUql8uGYViWte7K2Wsue9TofFmWWREJAID2l8/ny+VyMBiMx+NeZwEAANgIqqWtYppmJpMRBKHRakeCIOi6Xi6Xa3fdlY9kWa41R6qquisf0RMBANCVgsFguVwulUpUSwAAoENRLZ2d2rQ190YwGAwEAmueadt2NpuVJKlJtRSPxyORSK1LYuVsAAB6TSgUckcxO47DKwEAANCJqJZWW1Ue1d9ec9pao2pJVdVEItF8tJGmaZuWGwAAdCC/3y/LsmVZlUqFFwYAAKAT9Xq1VC6X8/l88/Jolfo5a36/v9Fpoigmk8nNzgsAALpNMBjM5/PFYpFqCQAAdKIur5ZWVlZM04zH441GDxmGsbKyUn9EFEW3Oar1R6tubEtwwAO1vQgdx6ndrt1o/ve/UCgIghAKhRrN5qhWq5VKZcPZAoFAoybXcZxisSgIQjgcbvTtlmW5T0QURUmS3IO1GwDgrXA4nM/nC4VCf3+/11kAAADOWkcWJbZt1wYZSZIUDAYbnZnJZAzDCAaDjT4GDAQCyWRyVX+0ZcGB9TkvcKuQ2p+O48iy3GSg3PLysm3biUSiUQFUKBSWl5fd2+4Faw/XSrB4PN5k4bC5uTlBEHbt2tXo0UulUu3RNyCZTDZ67rZtu49+/vnnNyq2MpmMu6z+msQXuGWT+6f7q8C9HYvFGv2esW07n89LkhSJRM7uKQHAC4LBoCiKhmHouu7z+byOAwAAcHbasVpyHKfWHLl/rrpbG0YhCIKmaU2qpUgkYtt2k7bI5/MlEolNfgLoVbquO46jqmqj4TDVajWdTgsvNDv1tVF9kdRIOBweGRlp9FV3amc0Gm1U7jiOYxhG609HeKFzaeVM959hk5N9Pl+TUUXrav5ey22dmjx68/qs1q9ZlrXmCaFQqNH3GoaxuLgoy3KTamlhYaFYLEqSJEmSW2DV36jdlmVZOkOT2AC6hiRJmqaVSqVisUi1BAAAOo731ZJlWel0ur48av7u2iVJkjvCqMkgDkEQWO0Izbmdjsu93eSIWxs1GbmzsLBQqVRGR0cbNRG2bbsTx9ZV3+m41YOw3gSueDxuWVaTOWvBYHBycrJ2t/5qtYcQzqZOqjc2Ntb8hFAo1KSgOReyLNc/rzUNDAzU/4dbNVbL/Y/bZLxYk9VPRFEMBoPNRztaL2jxGdWTJGlkZKRRgW6aZqVSkWWZ9VmAThcKhdxqqa+vz+ssAAAAZ2fLq6VisVgul4PBYJOxRdlsdtURURTd5ujMZY/c2+zOizVVq1XTNH0+n6qqa55gGMbMzEz9QKGz0rzKVFW1eX2gqmp/f39t7tWqP+vvnm0wQRDWfTfi/vPZwJW7z6r67FwGB/l8vnVrtYGBgUQiUSuwVvWVqwpNd8JvfcPV5NddpVKZm5sLBAITExONzslms+7gTZc7PEqWZX6LAm0lHA4vLS2Vy2XLsvhdDQAAOstGqiXHcUzTrJ+h1mRwUKlUymaz7gf7a54gy3IikahVSO4NpoH0IHciZP276/q32e5XHccRRbHJpLBMJpPP5/v7+xv1LO5iFqsONpqpdOaN5i/3h4eHmz9HRVH4OLoHqaraqOtszv3732QkmjuJpnnjubKyouv6mcfdLQtWNfj1d3lzC2wnRVF8Pp+u66VSibXbAABAZ1n7HcuqtY1W/XnmWI++vr5GZZCmabZtM20N9RYXF89skVpcTLr5UAufz6dpWpO3xO7kKXfQijtwg7EbaFvrLrfUfECoKxQK+Xw+91+ZOy+vtoK7+yFBo290/41MTk7SMQHbIxQK6bpeLBaplgAAQGd5vlpaXl7Wdb3WH7XyJr/+U+4m54fD4XNZuxfto34YkaZpTbbiSqVS0Wh0cHCw0aVyuVyjvzNnLmN85trGTUImEonm67KLoti86AS6zJl7mbtjAGtlU223hBr3IwS3e2ryLy6dTufz+VgsFo/Ht/hJAD0hHA5nMplisegO0fU6DgAAQKuer5ZKpVK1Wq0ddZc6qpVH7prZ9asd8YqnC5w576z+xpnH67+3yR7zwgtrYzd5aHe9oTUrpE17egAaqP2Gb3JOrX5q8tve3Si9yT92x3EWFhaUM5xTeqB7BQIBRVFM0yyVSlu07wEAAMBWeP4lfl9fn+M49atsUB51LsuyDMNoPjzn1KlT9WVii2oFUJNxarFYLBKJrLuX2dk+NIDt1Er9lEgkwuFwk43STdPM5/NnXllVVUVR1BejWQYEQQiHw9lsNp/PUy0BAIAO8vzbBmb1t7MzBxNZlhWJRBq96yuXy+tuGuW+iztz0lmjG60PKVp3zhqA7rDu8uSSJA0MDBiGYb7AnXCt6/qZK4u7H2yoZ9jKZwC0HbdaYk4cAADoLExM8JJt2+6aJvXrm7h/1g42Wt/a5/M1qpbct2fNhxuMjo6ygjWALSXL8plDFE3TNM5QW+apfjRlMBgcGxvb3siAxzRNY04cAADoOFRLW8JxHPfNkqZpjc5ZWFjI5XKtX9OdrugOIGq+L3ggENi5c2fzqzGwCIAn3Hl2q343ur8zV2ky1U4QhIWFBbe6YvEmdBl34FKhUKBaAgAAnYJX5Genfgcln8/XaDEjy7KmpqZEUTz//PMbXap+SlqtLVrztntjq54SAHhNFEWfz9e8S6rnOI5bzff19W1lZiihkwAAIABJREFULsADtWppcHCQwcUAAKAjUC09r7YdUnP135JIJBpVS7U+yLbtRuOD+vv73Y3SNv/JAEBXcxxncHDQMIwmtXsqlcrn8+5nAO6fqqryKxftT9O0WCwWDAa9DgIAANCqnq6WisViOp2uLWnU4ne1MpJIFMXdu3c3vw7vcABgYyRJisVizc/Rdd2dWFcsFt0jtbFRbtnk8/lYJhztaXBw0OsIAAAAZ6Gbq6WZmRld10dHRxuNLbJtu1Kp1O6Koii3YLviAwA2bnBwMBaLubvRVatVXddt265Wq9VqNZ/Pu+dIklQ/rMnv97MOHQAAAHC22r1aqi1sVL/IUe12IBAYHh5u9L21va4bnaBp2ujoaP3aRlvzJAAA202W5WAwWD+ryDCMWs1UrVYNw3A/YKj/jEFV1UAg4Pf7Y7EY/1MAAAAAWuFxteQ4TqVSsW27UXnU/NubjyEaGhoSRbHJfAd3o6INRgcAdBRVVVVVre265ThO/ZimarVqmqY7hy6fz6874Q4AAACAa2uLFcMwTNNUVbVRg2MYxvT0dPOLSJKkKIo7sGjVjebFUCAQ2Hh0AEBXE0XRnQQXiUTcI5ZlVSoVd0BTkyFLlUrFcRxmzwEAAACujVdL7vAi27Y1TWt0TjqdzuVy/f39jfaHrlVFZ9ZGtRssdw0A2AayLIdCodqwpkZSqVSpVBoYGIjH49sTDAAAAGhna1dLq2aoNZmqJori+eef3/DqitJ8s2dJks4777xzfA4AAGwb98MPBsYCAAAALkUQhFQqVeuM3BuO47Tyze7AItu2G00KSCaTyWRyM/MCAOCpJttHuPL5fDabDQQCgUBA0zQW9QMAAEB3UwRByOfzhmGs+oIoio3mqdVuexEYAIC2Vi6X6zeeUxRF07RAIBAMBn0+n7fZ0FlKpVImk9E0LZFIeJ0FAACgIUUQhGg06jjOmf2R19kAAOg8fX19gUCgUqmUy2Vd103TzOfz+XxeEARZloPBoKZpwWCwyQamgMs0zVKpZBgG1RIAAGhniiAIvF4BAGCzqKqqqmo0GhUEwbZtdxCT+6dlWbWaSVVVt2Ni0hwaCYfDhmG4f5cAAADaFq9lAQDYKpIk1XadcxxH1/VSqVQqlcrlsmEYhmHkcjlBEBRFcWfMhUIhaibUSJLEmpUAAKD98foVAIDtIIqi3+/3+/19fX2WZZXLZbdjcifNFQqFQqEgiuLu3bub7KwKAAAAtBuqJQAAtpssy+FwOBwOC4JgWZY7Y65UKkmSRK8EAACAzkK1BACAl2RZrk2as227yZm6rrPHHAAAANoN1RIAAO1CkqRGX7Jt+9SpU01OAAAAADzBK1QAADqAruuiKFItAQAAoN0wagkAgA4QCATOO+880zS9DgIAAAC8CB9+AgDQGURRVFW1yQnT09NLS0vlcnnbImE7OY6j67rXKQAAAFZj1BIAAN3A3WauXC5ns1lJkkKhUCQSCQaDbDnXHSqVyuzsrCzLO3bs8DoLAADAi1AtAQDQDfx+/8jISKFQKBaLtm3n8/l8Pi/LcjgcDofDmqbRMXU0n8/njloqlUrBYNDrOAAAAL9DtQQAQDcQRdFtkRzHKZVKhUKhUChYlrWysrKysiJJUiQSiUQimqZ5nRQbIUlSNBrNZrPZbJZqCQAAtBWqJQAAuoooiqFQKBQKDQ4OlsvlVR2TqqqRSCQajTZftgltyK2WSqWSaZqKwks4AADQLnhdAgBAdxJFMRgMBoPBgYGBUqmUz+cLhYJhGOl0Op1OBwKBaDQaDodlWfY6KVri9/s1TSuXyysrK8lk0us4AAAAz6NaAgCgy9XGMdm2XSgU8vl8qVSqVCqVSmVpacld8DscDnsdE+uLx+PuSu19fX2SxD6/AACgLVAtAQDQK9z1eqLRaH3HVCgUqtUq1VJHCIfDqqoahpHP52OxmNdxAAAABIFqCQCAHlTrmHRddzeS8zoRWhWPx5eWljKZDNUSAABoEwylBgCgd/l8vmQyGY/HvQ6CVkWjUUmSDMMoFoteZwEAABAEqiUAANCEYRiZTMayLK+D4HmSJLnjlbLZrNdZAAAABIFqCQAANLGysrK8vLywsOB1EPxOPB4XRbFUKlWrVa+zAAAAUC0BAIDGAoFAIBBgWZ+2oiiKu+w6A5cAAEA7oFoCAAANhcPhiYmJUCjkdRC8iLs8Vj6fNwzD6ywAAKDXUS0BAICNYxkmTwQCgWAw6DhOOp32OgsAAOh1VEsAAGDj5ufnp6amVlZWHMfxOktvSSQSgiDk83nTNL3OAgAAehrVEgAA2CDLsqrVqq7ri4uLJ06cSKVS1BzbRtM0TdMcx8lkMl5nAQAAPY1qCQAAbJAsy7t27RoaGvL7/ZZlpdPpEydOzM7Olkolr6P1hL6+PkEQVlZWaPQAAICHFK8DAACADiaKYjQajUajxWIxk8mUy+VisVgsFjVN6+vrY/3vLRUKhfx+f7VazWaz/f39XscBAAA9imoJAABsglAoFAqFKpVKNpstFArlcrlcLvv9/mQyScG0dfr6+ubn5wuFAtUSAADwCtUSAADYNIFAYHh42DTNdDqdy+Wq1ers7Kzf708kEuFw2Ot0XSgSiViWFY1GvQ4CAAB6F9USAADYZIqiDA4OJpPJbDabzWar1erc3Jyqqn19fdFoVBRFrwN2lXg87nUEAADQ06iWAADAlpBlOZlMxuNxt2AyDGNxcTGTyVAwAQAAdBN2iAMAAFvILZh27tyZSCQkSXILplOnTpXLZa+jAQAAYBMwagkAAGw5t2Dq6+vL5XKZTEbXdUni8y0AAIBuQLUEAAC2iSRJ8Xg8Go0Wi0W/3+91HAAAAGwCPjAEAADbSpKkSCTidQoAAABsDqolAAAAAAAAbBDVEgAAaCOlUmlxcdE0Ta+DdCTHcdLp9OLiotdBAABAD2GtJQAA0EZSqVSlUhFFcWBgwOssnUfX9VQqJQhCLBZjNSsAALA9qJYAAEAbSSaT6XQ6kUh4HaQj+f3+eDweCATolQAAwLahWgIAAG0kGAwGg0GvU3QwRnsBAIBtxlpLAAAAAAAA2CCqJQAAAAAAAGwQ1RIAAOgYuVzu9OnTlUrF6yAAAAB4HtUSAADoGOl0ulKpnD59en5+3jRNr+MAAACAagkAAHSO8fHxSCQiCEI+n5+amspkMl4nAgAA6HVUSwAAoGMoijI8PDw+Pu73+23bXl5ePn36tK7rXucCAADoXVRLAACgw2iaNjExMTg4KElSpVI5depUOp12HMfrXO3INM35+flCoeB1EAAA0LWolgAAQOcRRTEWi+3cuTMSiTiOk0qlpqamyuWy17nazsrKSj6fX15epnoDAABbhGoJAAB0KlmWh4eHR0dHFUUxDGN6enpxcdG2ba9ztZFEIqGqqmEY6XTa6ywAAKA7US0BAIDOFgqFduzYEYvFBEFYWVk5depUqVTyOlS7EEWxv79fEIRMJmMYhtdxAABAF6JaAgAAHU+SpMHBwfHxcXeEzszMzPz8vGVZXudqC+FwWNM0x3EWFxe9zgIAALoQ1RIAAOgSmqZNTk66w5fy+TzDl2qGhoZEUSyVSrlczussAACg21AtAQCA7uEOXxobG1NV1TTNmZkZVrAWBEFV1UQiIQjC8vIyg7kAAMDmoloCAADdJhgMTk5ORqNRQRAymczKyorXibzX19fn9/sty1paWvI6CwAA6CpUSwAAoAtJkjQ0NDQyMhIOh90pcj1OFMXBwUFBEPL5PPMEAQDAJqJaAgAAXSscDo+MjIii6HWQthAIBNyWbXFx0bZtr+MAAIAuQbUEAADQK/r7+2VZNgwjk8l4nQUAAHQJqiUAAIBe4S5zLghCJpOpVqtexwEAAN2AagkAAPSo3tw5LhwOR6NRx3Hm5+d78ycAAAA2F9USAADoRZVK5eTJk8Vi0esgHhgYGFAURdf1VCrldRYAANDxqJYAAEAvymazpmmurKx4HcQD7vZ5giBkMplyuex1HAAA0NmolgAAQC8aGhpKJBLDw8NeB/FGMBh0d4tbWFhgtzgAAHAuqJYAAEAvEkUxmUxKUu++Furv71cUxTCMdDrtdRYAANDBevflFAAAQC+r7RaXzWYty/I6DgAA6FSK1wEAAADgjVAolEgkwuGwLMteZwEAAJ2KagkAAKB3JZNJryMAAIDOxoQ4AACAFzEMY2pqiq3TAAAAWkG1BAAA8CKpVErX9ZmZmVwu53UWAACAdke1BAAA8CJDQ0ORSMRxnIWFhaWlJa/jAAAAtDWqJQAAgBcRRXF4eLi/v18QhGw2Ozc35ziO16EAAADaFNUSAADAGvr6+kZGRkRRLBQKp0+fNk3T60QAAADtiGoJAABgbeFweHx8XJblarV6+vTparXqdaLt4DjO8vKyYRheBwEAAJ2BagkAAKChQCAwMTHh8/lM05yeni4Wi14n2nJLS0uZTGZubs7rIAAAoDNQLQEAADSjqur4+HggELBte25uruu3jUsmk36/f2BgwOsgAACgM1AtAQAArEOW5fHx8XA47G4bl06nvU60hWRZnpyc1DTN6yAAAKAzUC0BAACsTxTFkZGRRCIhCEIqlVpeXvY6EQAAQFugWgIAAGhVMpkcHBwUBCGTyczPzzuO43UiAAAAj1EtYX133XXXXXfd5XWK9XVKTgBAR4vFYsPDw6Io5vP5ubk52iUAANDjFK8DdLZKpXLkyJHjx48vLS2Vy2V3zcsLLrhgz549gUDA63RbzjTNJ5544tixY3Nzc6VSSZblRCJxwQUX7Nu3LxQKeZ0OAICtEolEJEmam5srFoszMzOjo6OSxMd1AACgR1Etbdwzzzxzzz33lMvl2pFSqTQ1NTU1NXXo0KEDBw5cdtllHsbbatPT09/5zndWVlZqR0zTnJubm5ube/jhhw8cOPDyl7/8rC7oDjhi2BEAoCOEQqHR0dG5ublyuTwzMzM+Pi6KotehAAAAPEC1tEHHjx//xje+4TjOrl279u3bNz4+HgwGdV1fXl4+evTokSNH7rnnni6ulqanp7/+9a+bpjk6OnrllVfu2LEjHA6bpplOp48dO/bLX/7y+9///tlWSwAAdJZgMDg+Pj4zM6NpWi/0SisrK4FAwO/3ex0EAAC0F6qljTAM43vf+57jONdee+1rX/va2nFN0yYmJiYmJq6++uqDBw96mHBLWZb13e9+1zTNvXv3HjhwoDYFQFGU0dHR0dHR/fv3d/HTBwCgxu/3T0xMqKrqdZAtl81ml5aWFEWZnJyUZdnrOAAAoI1QLW3E448/XiwWJycn63uleoFA4IYbbjjzeCaTeeihh5599tlcLqcoysjIyJVXXnnRRRfVn1ObF/bEE088+uijS0tLkiRNTk6+7nWvGx4e3vAFP/GJTxw5cuRXv/rV8vKyYRif+MQnBEGYmZl5/PHHT548mclkRFGMxWIXXnjh1VdfrWlak6f/5JNPZrPZ4eHh+l6pns/nu/7662t3W3mU2jy4+glxtdsby+k6ffr0Qw89dPr06XK5rGna5OTk/v37x8fHV532zDPPPPjgg+5qrP39/Xv27NmzZw9z9AAA6+qFXkkQhEgkks1mDcOYm5sbGxvrhVFaAACgRVRLG/HMM88IgnDFFVec1Xc9++yz3/rWt3Rdd++apnnixIkTJ068+tWv/v3f//1VJ//oRz96+OGH6x9xamrqPe95TzKZ3NgF77vvvsOHD686+OUvf7n+7vLy8vLy8tNPP/3ud787GAw2eiJHjx4VBOGVr3xli0uWbuxRNuUKv/zlLw8ePFjbu6dQKDz99NO//e1v//AP/3DPnj210x555JEHHnigdnd2dnZ2dnZ+fr6VbGidKIrbvI/SZj3iZz7zmYceeug///M/W3msAwcOvPrVr7799tvP/XEBoH3Isjw6Oup+VLO4uDg0NOR1IgAA0C6oljbCLR0mJiZa/5ZcLvftb39b1/VLL710//79yWSyXC7/5je/+Z//+Z+f//znu3fv3rFjR/35jz766DXXXPOKV7wiHA7Pz8//4Ac/SKVShw4dqo0GOtsLHjlyZP/+/ZdffnkikahVQjt37tyzZ8/k5GQ4HNZ1fXZ29ic/+cnMzMyhQ4fe8IY3NHouc3NzgiCsun4TrTzKXXfd1WSI0MZyzs/P33///Y7jvOIVr7j66qvj8Xg2mz106NDjjz9+8ODBiYmJwcFB97T/+q//EgThiiuu2L9/fzQazeVyDz300C9/+csWnyC6W7FYvPvuux966CH37rp11Re+8IVXv/rVt912Wyuj6gCgg/h8vtHR0ZmZGXesdP3HXQAAoJdRLW1EqVQSBCEcDq86fmYtUjvyyCOPVKvV3/u933vrW9/qHvH5fPv375dl+f7773/sscdWNTXXXHNNbbbd5OTkdddd9y//8i8nT56snXC2F7ziiite//rXr4p3yy231G5rmrZ79+7+/v6777772LFjTSqbYrEoCEIkEml0wqY8yrlf4dFHH7Vt+4ILLnjLW97iHkkmk9dff32hUDh+/Pgjjzzy5je/WRCExx57zLbtl770pdddd517Wl9f33XXXVcsFp9++ukWnyO22XYOgLrnnnv279//kpe8xL277uNedNFFe/fu/cEPfvCOd7xj69MBwLbSNG1oaGh+fj6dTiuKEovFvE4EAAC8R7W0TY4fPy4IwpVXXrnq+CWXXHL//fefPn161fFV26uNjY0JgpDP5zd8wb17956Zyh2e89xzz2Wz2drEOkEQVlZWWnhOrTr3R9nYFaampgRBuPrqq1cdv+aaa44fP17r6dwb+/fvX3XaVVddRbUEQRDuvffeG2+88ay+5e1vf/sPf/jDrauWTpw4EYvFEonEFl0fwKbQdV2SJEXpttdakUjEMIxUKrW0tKSqaotz2wEAQBdraa0crOK+iqovelx31Vn1pUwmIwjCV77ylU9+8pN/Xefzn/+88MI4oHrxeLz+rrvRr2VZG75gX1/fqiNLS0tf+tKXHnnkkcXFxfq+RhAE0zSbPP1QKLTm01/Thh/l3K+Qy+UEQRgYGFh13J0HV8vvnnbmqP7+/v5W4nWEarX63ve+N5lMDg8Pf+5zn6utvWrb9qc+9aldu3YlEol3vetdtb82oij+0z/9086dOzVNu+qqq/73f/933fPvvvvuiYkJd67lsWPH3va2tyWTyVgsdsMNNywvL7cS0jTNO++8c8eOHX19fX//93/vHlzzUm5+URRrT2TdR6xWqx/4wAeGh4eHh4c/8IEPVKvV5j+ZeocPH77qqqtqd2vn6Lr+/ve/3/3ev/u7v6v/lle96lWPPfZYK8/6bD333HM33XTTjTfeeOa/aABtRdf16enpmZmZFv9n11kSiUQ0GnUcZ25urvYbFQAA9CyqpY0YGRkRXhgU0yJ3Eo1t27ZtO3Xcr9Z3Rq51N1452wueuX/Nj3/843K5PDY29id/8icf+chH7rzzzrvuuuuOO+5Y97mc1dPf8KNs4hXwqU99ampq6qmnnvrVr3713//937Xj//AP//DTn/70Jz/5ybPPPmsYxp133ln70o9+9KOf/vSny8vLb3zjG//iL/5i3fN/9rOfuTMQBUG48cYb3//+909PT586dWpsbOyv/uqvWgn5t3/7t4cOHfrJT37y3HPPTU9PuwfXvJT797z+L/y6j/jpT3/6N7/5zeHDhw8fPvzkk09+5jOfaf6TqTc/P+/+nV/lM5/5zLFjx5588snDhw/ff//99V8aHR2dnZ1t5Vm3bmpq6o//+I8vuuiib37zm3fccQd7MwFtTqrjdZYtMTg4qGmabdtzc3NnvuoAAAA9pdsGaW+PCy+88OjRo48++uhll13W4kvGWCyWSqVuvfXWzVrz8twv6E4Ee9vb3lY//CGVSq37jRdeeOH//d//PfLII608/Q0/yrlfIRqNptPppaWlycnJ+uOLi4tC3VpR7mmpVGp8fLz+tBbH2nSEb3zjG/fdd9/o6KggCHffffcll1ziHv/yl7/8/e9/f9euXYIgfP7zn7/yyitrw4W+9KUvDQ8PC4Lw4Q9/+LOf/ey65//jP/6je31BEJ544gn3hqZpn/70p2sP19zXv/71733ve7t373ZDntWl1j3t3//93++99173P/EXv/jF66+//q//+q+b/GTqNVpc6d/+7d9++MMfupNVv/jFL1566aWtPM0NmJ6evuOOO/7jP/7Dtm3TNMfHx0Oh0I9//GP3q3fddVeTfw6KojBXpfvoun7q1KnPfe5zXgfBOmzbrh9f2X0cx8lms5ZlqaoajUa7+Jk24X6mAgBAj6Na2ojLLrvspz/96dzc3MGDBw8cONBKu3TBBRc8/PDDDz74oLt09Lk79wu6nzGuWgOitg1WE5dddtnPfvaz+fn5Rk9f1/WDBw+6m9m1/iiKopimWa1W3dl/555zx44d6XT6wQcfXFUt/eIXvxAEYefOne7dnTt3ptPphx566O1vf3v9aQ8//PC6D9EpZmdn3T5IEITzzjuvdnxqauqiiy6q3a3/T+n2SoIgBIPBcrm87vn1P+TDhw9/9KMf/fWvf+1O25RluZWQ09PT559//qqDLV5q3dNmZ2drT/z888+fmZmpHV/zJ1NvZGRkdnb2zGwzMzP111z1cGsOdNqAcrn84Q9/+Fvf+pYkSbZtK4pSrVbrh2UdOXJkUx4IneXkyZNuPQp4rta/92a1FAgEWMscAACqpY1QFOXGG2/8+te/fvjw4enp6X379u3YsSMajcqyXKlU5ufnn3rqqVXfsn///ieeeOJXv/pVsVjct2/f4OBgKBTSdT2dTp88efKpp556z3vec1YZzv2CQ0NDMzMzP/jBD97whjfE4/FMJvPwww/XRn80Icvy2972Nvfpz87OvvKVr9yxY0c4HDZNM51OHzt27LHHHisWi2611PqjuOOwfv3rX19++eU+n+/cc1555ZVPPPHE0aNH77333le96lWxWGxlZeXQoUPPPPOMLMu1FdD37dv3+OOPP/300wcPHrzqqqui0Wgul3v44Ye7aQ3v0dHREydOuK3Qc889Vzs+OTn5wAMP1Fq2dTU5v/4dxTve8Y4777zzO9/5jvszb3Fg3cTExPHjx1/2spfVH2x0qVVvYNZ9xNHR0eeee+6lL32pIAjHjx93hxoJjX8y9fbu3fvggw+eWS2NjY3Vrvnss8/Wf+nBBx/ct29fK896XZqmffOb3/zYxz728Y9//Mc//rFpmisrKwcPHnSXDAMAz1Wr1enpadu2Q6HQyMhIbxZMAAD0OKqlDZqYmLjlllu++93vzs/P//CHPzzzhEgkcuDAgfq7N99887e+9a2jR48ePXr03AOc+wVf85rXfOMb3zh+/Li72Zxr3759rSw/PD4+fsstt3znO9+ZnZ295557Vn3V5/O5vdJZPcpLX/rSQ4cOPfDAAw888IB7xF0NfcM5h4eH3/jGNx48ePDIkSP1IztEUTxw4MDQ0FDttD/4gz/40Y9+9Nhjj9Vfc+/evYcPH25xxE2bu+mmmz70oQ995StfEQThQx/6UO34e9/73ne/+91f/OIXd+/effTo0U9/+tPf/OY3m1ynxfOLxWI0Gg2FQlNTU3/5l3/ZYshbbrnl1ltv/epXv9rX1/fJT37SnRPX6FL9/f2//e1vL7744hYf8aabbrrtttv++Z//WRCE22677aabbmr+k6n3pje96dvf/vaf/umfrjp+8803f/CDH/za174mCMIHPvCB+i9997vfvfnmm1t84q247LLL7r333qeeeupjH/vYfffd99nPfvYLX/jCJl4fADbM7/ePjY3NzMwUi8WFhYXaoFcAANA7unNpye0xMTFx6623vvnNb77wwguj0aiiKKqqxmKxiy+++Prrr7/ttttq73td4+Pj73vf+173uteNj48HAgFJkgKBwNjY2Gte85r3ve99Gwhwjhd8yUtecvPNN09MTCiK4vP5xsbG3vzmN9fXYes++q233vqmN73pggsucJ++3+8fGRm59tprb7vttpe//OVn+yjXXnvt1VdfnUgkVrU555Lziiuu+LM/+7OLL744FApJkhQKhS6++OJ3vetde/bsqT/tqquueuc737lz506fz+fz+UZHR9/0pje97nWvE17Ym6/T3XHHHRMTEy972cte8YpXvOpVr6qt6e7+Bb7hhhui0eg73/nOWuHSSIvnf/WrX7399tsjkchrX/vaa6+9tsWQH/nIR/bv33/ttdfu3r27Nr2u0aVuv/32/fv31z4bX/cR77jjjosvvnjv3r179+695JJLPv7xjzf/ydT7oz/6o0ceeeTYsWOrjn/84x8/77zzLr300ssvv/z1r3997fjRo0cfe+yxt771rS0+8dZdeumlbsFUKBTOasEyANhSgUBgeHhYFMV8Pr+0tOR1HAAAsN3ERivUAj3u2Wef/dd//deJiYk///M/9zrLZnryySevv/76RpO/elmTn8zf/M3f/OIXv7jvvvtauc511113zTXX3H777ZsdEADaWj6fn5+fFwQhmUwmEgmv4wAAgO3DhDhgDY7jHDp0SGi8tHPH+eAHP/jRj360Wq1+6EMfqk1XhNDaT6Z+2ex1tdhAAehNtm3Pzc2FQqF4PO51lk0WiURM01xeXk6lUoqiRKNRrxMBAIBtQrUECF/72tf27NkzNjYWi8Vs256dnf35z39+8uRJn893+eWXe51uc+zcufOKK67Qdf0tb3nLpz71KQ+TrLnCq4fDJ9vnJwOgFxQKhVKpVCqVZFmORCJex9lkfX19lmXl8/lAIOB1FgAAsH2YEAc8v174KrIs33DDDZdccsm2xwEAdLPl5eVMJiMIwsjISDgc9jrO5rMsqzs2wQAAAC2iWgKEU6dOHTlyZHZ2NpfLWZYViUR27tx51VVXsb87AGArzM/P5/N5SZLGxsYY4AMAADod1RIAAMC2chxndnbWnRYWjS5OAAAgAElEQVQ3MTGx5vaUAAAAnULyOgAAAEBvEUVxZGTE7/dbljU7O2vbtteJAAAANo5qCQAAYLtJkjQ6Oqooiq7rs7OzjCIHAACdi2oJAADAA4qijI6OSpJULpcXFxe9jrPlyuWy1xEAAMCWoFoCAADwht/vHxoaEgQhl8u528Z1q8XFxenp6Vwu53UQAACw+aiWAAAAPBMOh5PJpCAIy8vLxWLR6zhbxZ3xJ4qi10EAAMDmY4c4AAAAj83Pz+fzeUmSxsfH/X6/13G2RLlc1jTN6xQAAGDzMWoJAADAY0NDQ4FAwLbt2dlZ0zS9jrMl6JUAAOhWVEsAAAAeE0VxdHRUVVXTNOfm5hhUDgAAOgjVEgAAgPdkWR4ZGRFFsVKpLC8vex0HAACgVVRLAAAAbcHv9w8PDwuCkM1mC4WC13EAAABaQrUEAADQLsLhcCKREARhYWFB13Wv42yHQqFgWZbXKQAAwMYpXgcAAADA7ySTyUqlIsuyonT/67RisTg/P6+q6tjYWC88XwAAupLIOpEAAABtxbZtSeqJoeW6rs/MzJimKcvy2NiY3+/3OhEAADhrVEsAAADwjGEYs7Ozuq67C5lrmuZ1IgAAcHaolgAAAOAly7JmZ2crlYooikNDQ5FIxOtEAADgLFAtAQAAwGOO4ywsLOTzeUEQ4vH4wMCA14kAAECrqJYAAADQFlKpVDqdFgQhHA4PDw+Louh1IgAAsD6qJQAAALSLfD6/sLDgOI7f7x8dHWXbOAAA2h/VEgAAQAcwTdM0zUAg4HWQLVcqlebm5mzbVlV1dHTU5/N5nQgAADRDtQQAANDuqtXqzMyMKIqTk5OyLHsdZ8vpuj47O2sYhiRJw8PDoVDI60QAAKAhyesAAAAAWIeqqrIsy7Js27bXWbaDz+ebmJjQNM227dnZWXcBJgAA0J4YtQQAANABTNOUZbnXVrZeXl7OZDKCIASDweHh4V4YsQUAQMehWgIAAED7qi3srSjK6Oio3+/3OhEAAHgRqiUAAAC0tUqlMjc3Z5omSy8BANCGWGsJAAAAbS0QCExOTgaDQUEQVFX1Og4AAHgRRi0BAACgAziOU61WA4GA10EAAMCLUC0BAAAAAABgg5gQBwAAAAAAgA2iWgIAAOhI1Wr11KlThULB6yAAAKCnUS0BAAB0pEKhUK1WFxcXLcvyOovH3GWYvE4BAECPoloCAADoSIlEwu/3W5a1uLjodRaPpVKp06dPZ7NZr4MAANCLqJYAAAA6kiiKQ0NDoigWCoVenhbnOI5hGI7jqKrqdRYAAHoRO8QBAAB0sFQqlU6nZVnesWOHLMtex/FMpVIJBAJepwAAoBcxagkAAKCDJRIJn89nWdbS0pLXWbxErwQAgFeolgAAADqYKIrDw8OiKObz+V6eFgcAALxCtQQAANDZ/H5/PB4XBGFpacm2ba/jAACA3kK1BAAA0PGSyaTP5zNNs8enxa1paWmpWq16nQIAgK5FtQQAANDxRFEcHBwUBCGXy5VKJa/jtJFcLpfNZk+fPp1Op9m+BgCArUC1BAAA0A00TXOnxS0uLtKh1ITD4Vgs5jhOKpU6deoUw5cAANh0Iq88AAAAuoNt21NTU6Zp9vX19ff3ex2njRSLxcXFRdM0RVGMx+PJZFIURa9DAQDQJaiWAAAAukehUJibmxNFcWJiwu/3ex2njZimubi4WCwWBUEIBAJDQ0M+n8/rUAAAdAOqJQAAgK4yOztbLBY1TRsfH/c6S9vJ5XLuPnqiKPb19SUSCYYvAQBwjqiWAAAAuophGFNTU47jDA8PRyIRr+O0nfrhSz6fb3BwUNM0r0MBANDBqJYAAAC6TSqVSqfTsizv3LlTkti2ZQ211ZcEQQiHw4ODg7Isex0KAICORLUEAADQbRzHmZqaMgwjHo8PDAx4HadNudvGZTIZQRAkSUomk+4WewAA4KzwKRYAAEC3EUXRbZTy+bxt217HaVOiKPb394+Pj/t8Ptu2l5aWZmZmDMPwOhcAAB2GUUsAAADdKZPJRKNR5nmty3GcdDqdyWQcx2F5bwAAzhbVEgAAACDour60tFQqlQRB8Pl8O3bs8DoRAACdgWoJAAAAeF6pVFpaWopGo319fV5nAQCgM1AtAQAAAL/jvjxmQhwAAC2iWgIAAAAAAMAGsUMcAAAAAAAANohqCQAAAGiJbdsLCwuGYXgdBACANkK1BAAA0Cts2/Y6QmfLZDK5XG52dtbrIAAAtBGqJQAAgJ6Qy+VOnjyZy+W8DtLBwuGwpmnJZNLrIAAAtBGqJQAAgJ5gWZZlWVRL58Lv94+Pj4fDYa+DAADQRtghDgAAoCc4jpPL5aLRqCiKXmcBAADdg2oJAAAA2BymaSqK4nUKAAC2FRPiAAAAgE1gGMbJkyfn5uZ0Xfc6CwAA24cPVQAAAIBNUCqVHMcpFAqFQiEajSYSCVVVvQ4FAMCWY0IcAAAAsDmq1WoqlSoWi4IgiKLoFkxMkQMAdDeqJQAAAGAzVSqVVCpVKpUECiYAQA+gWgIAAAA2X7VaTafThULBvRsOh5PJpM/n8zYVAACbjmoJAAAA2CoUTACArke1BAAA0Its206n0+VyeWJiwuss3a9cLqfT6fopcvF4nIIJANAdqJYAAAB6kW3bJ0+etCxraGgoGo16Hacn1BdMgiCEQqFEIhEIBLxNBQDAOaJaAgAA6FHpdDqVSimKsnPnTlEUvY7TK8rlciaTcXeREwRB07S+vr5QKORtKgAANoyNKgAAAHpUPB7PZrOmaa6srMTjca/j9ApN0zRNMwwjm82urKyUy2XHcaiWAACdi1FLAAAAvSubzS4tLcmyvHPnTkmSvI7TcwzDyGQywWAwHA57nQUAgA2iWgIAAOhdjuNMTU0ZhpFMJhOJhNdxAABA5+GzKQAAgN4limJfX58gCNls1rZtr+MAAIDOQ7UEAADQ06LRqM/nsywrk8l4nQWrzc3NzczMVKtVr4MAANAQ1RIAAEBPE0UxmUwKDFxqP5ZlFYvFUqnE/n0AgHZGtQQAANDrwuGwz+ezbTubzXqdBb/jLq8+ODjo8/m8zgIAQENUSwAAABDcNbwZuNRuFEWJxWJepwAAoBmqJQAAAAiRSMRdcWllZcXrLDgLmUzGNE2vUwAAehrVEgAAAARBENyt4jKZDAOXOkWxWFxeXj558uTc3Fy5XPY6DgCgR1EtAQAAQBAEIRKJqKrKwKUOIkmSpmmO4xQKhenp6ampqWw2a1mW17kAAL1FdBzH6wwAAABoCysrK4uLi7Is79q1i13JOkW1Wl1ZWcnn8+5wM1EUw+FwNBoNBoNeRwMA9ASqJQAAADzPcZyTJ0+apjkwMBCPx72Og7Ng23Yul8vlctVq1T2iKEo0Go1Go6qqepsNANDdqJYAAADwO9lsdmlpSVGUnTt3MnCpE+m67nZMtZlxfr8/FotFIhFJYjUMAMDmo1oCAADA79QGLg0ODrLtfedyHCefz+dyudry3pIkRaPRSCQSCAS8zQYA6DJUSwAAAHiRTCazvLwcDAbHxsa8zoJzdeYgJp/P53ZMiqJ4mw0A0B2olgAAAPAitm0Xi8VwOMyEuK7hOE6xWMzn88Vi0X3939/f39fX53UuAEA3oFoCAAAAeoVt24VCIZ/PDw0NMWoJALApqJYAAAAAAACwQXxSAQAAAOB3UqmU4zixWExVVa+zAAA6ANUSAAAAgOc5jpPNZm3bDgaDVEsAgFZQLQEAAAD4naGhoVKpFAwGvQ4CAOgMrLUEAAAA4CxYliXLstcpAADtglFLAPD/7d1pkFzVfTfg293TPd2zaJlB1ooNGHCwKLaYzQQVAWOHyHZYYzYHY3bM4rjYglKqIhQEB1IVGwJyHLDBgaQSl1GRMo7BKLIwVhC7YxmZVRghkDQazd573/fDDfOOR5rRTEujnuV5Pkx1n3vuuf87Gi390znnAgCj8N5775VKpYaGhubm5oaGhlgsVuuKAKgl0RIAAMMpFAqdnZ2tra3xeLzWtVB75XK5UCiEYdjd3d3d3Z1IJJqamhobG2VMAFOWBXEAAAxn/fr1xWJx1qxZM2bMqHUtjAthGPb29vb09PT29lYqlagxHo83NjY2NTU1NDRIIQGmFNESAADD6ejo6O3tbWlpyWQyta6F8SUMw2w229PT09PTUy6Xo8ZYLJbJZKKYqa7OIgmAyU+0BAAA7KpsNhtNZSoWi/2N9fX1jY2NjY2N6XS6hrUBMKZESwAAwG5TKBR6e3t7e3uz2Wx/YyKRiDImy+UAJh/REgAAsPuFYdjX1xfFTKVSKWpcsGCBlZUAk4xoCQAAGEPRlkzRPKa9997bg+QAJhnREgAAUHvRArp0Oi17AphYrHMGAABqr62tbcOGDd3d3bUuBIDRES0BAAC1l0wmE4lEQ0NDrQsBYHQsiAMAYHTCMLRkiT0vm82WSqWGhoZEIlHrWgD4/+pqXQAAABNGPp/fsmVLEAQLFiyodS1MOR0dHT09PUEQpFKphoaGTCaTyWTETAA1J1oCAGCkEolELpcLwzCfz9fX19e6HKaW+vr6YrGYz+cLhUKhUOjo6AiCIJVKZT5UV+fTDUANWBAHAMAofPDBB93d3dOmTZs9e3ata2EqKpfLfX19fX192Wy2WCwOPJRMJqOMKZ1Op1KpWlUIMNWIlgAAGIVsNrthw4ZYLLbvvvtai0RtlUql7IcKhcLAQ4lEon82kxl2AGNKtAQAwOj87ne/y+fze+2118yZM2tdC/yfcrmcy+X6+vpyuVw+nx/4MScejzc2Ns6ZM6eG5QFMYlYjAwAwOtOnT9+8eXNnZ6doifEjkUg0NjY2NjYGQVCpVHK5XDSbKZfLVSoV/6EOMHZESwAAjE5zc3NbW1uxWOzr62toaKh1OTBYPB5vaGiIfjijXedjsdgw/Ts6Ourr69Pp9PDdANiheK0LAABggonH483NzUEQdHZ21roW2IlYLJZOp4fZbqlUKm3ZsmXDhg1mNgFUR7QEAMCoTZ8+PQiC3t7eUqlU61pgl1QqlaampsbGxnh8yA9HpVJJ8AQwFNt4AwBQjXfffTeXy7W2tra0tNS6FhhbGzZsyOVy6XQ6mgBVX1+fSqVqXRTAeGGvJQAAqjFt2rRcLtfV1SVaYtIrFothGEb7gkct8Xg8lUrVD2CfJmDKMmsJAIBqVCqVt99+u1KpzJ8/32beTHrFYjGXy+U/VC6XBx6NxWLJZHJg0pRIJGpVKsAeJloCAKBKmzdv7uzsbGpqmjt3bq1rgT2qWCzmB9h+07G6urr+aU3RtvcAk5UFcQAAVGn69OmdnZ3RZt51df5hyRSSTCaTyWRTU1P0tlKpRBlTNLOpUCiUSqVSqdTX1ydaAiY9/wIAAKBK9fX16XQ6l8t1d3fPnDmz1uVAzcTj8Uwmk8lkordR0lQoFPL5fDKZHObE9vb2eDze3NxsAR0wcYmWAACoXrSZd2dnp2gJ+g1KmobR3t4ehmFDQ4NoCZi4REsAAFSvubm5ra2tWCz29fXZzBtGpVKpzJgxo1gsDjOzqbu7u6+vL5lMplKpVCqVTCY9ig4Yb0RLAABUL1rL09nZ2dnZKVqCUYnH43vttdfwffr6+rq6uga2RNs8RTFT9HX4NXcAY020BADALpk2bVq0mXe5XLaoB3av5ubmZDJZKBSKxWKhUKhUKsViMZon2N8nFosNCptSqZTfjMAeI1oCAGCXpNPpdDqdSqXCMKx1LTDZNDQ0DJwPWC6XC4VClDRFYVOxWAzDMGoceGI8Hk8mk7Nnz66vr9/jVQNTS8y/AAAAACau/pipf3JTqVSKDu2zzz5DLZeL+kdbOO3BYoFJSLQEAAAwqYRhGOVNjY2NQ/Vpb2/funXrtGnTZs+evSdrAyYfC+IAAAAmlVgsttPpSIlEIp1OD7NcLgzDN998M5lM1tXVRZuF97+wkRMwkFlLAAAADFYsFtevX7/DQ7FYrG5oe7ZMoPZESwAAAOxAqVQqfqj/df9GTjsUi8USiURdXV06nZ41a9YeKxWoIYkyAAAAOxDNQspkMgMbwzAsl8vFYrFcLkd508AXYRiWSqVSqRSPx4cZua2tLQzD6dOn20QcJgHREgAAACPVvxpuh0ejXKlcLsdisWEG6e7uLpVKzc3NQ3XI5/O9vb3xeLyuri4xwK5WD4wB0RIAAAC7xwi3W2ppaSkUCslkcqgOuVxu69at27f3Z0yDIifxE9SQvZYAANhtKpVKd3d3Pp//yEc+UutagAksm812d3eXP1QqlSqVygjPTSQSM2fOnDlz5lAdSqWS7cZhN/LbCQCA3SYMwy1btoRhOGPGDFuoAFXLZDI73OMpWm038EV/8BTt9BQEQblcHmbkUqn09ttvB0FwwAEHDNUnn89H20VFEonE8FtHwRQnWgIAYLdJJBLTp09PJpNmBAC71/B7PEWi+KlSqQyzLC6a/TR8VNTR0dHV1TWoMb6dKHLaXjKZtC6PSSAMwzAMK5VK9LX/Rf/X6HdcOp22IA4AAIApJPpIPEy61N7e3tvbG82Eij5Cj2r8efPmNTY27vBQPp/ftm1bMplsbW0d6vRSqRSVF4vFzJZi1/X29oZhmMlkhko8s9lse3v7oORo5EtQp02b5n+TAAAAmEJisdjwD7BraWlpaWnpfxt9zI4W30UfvKMXQxkmDyqVSt3d3el0epho6YMPPshmswNb+mOm2If6Xw9MoKLX06ZNGypBiO4imm81zO2z20Vx4TArK8vlck9PT/DhrLoo3Bnh23K53NDQMHfu3KGu3tbWVigU5s+f39DQsMMOlUqlr69vmPoH/QQO/KlLJBL19fWiJQAAABhStMxtt6zzTSaTe+2112iH6k8QRtK5sbFxqOSou7t78+bNjY2N8+bNG+r0DRs2lEql4PcDuP4Bd9rY2to6VGyXzWZzuVx9ff1QAUcQBJ2dncPc2vCiWG2oo729vYVCIZPJpNPpHXaoVCptbW2DWgZOWIsmuw18OzDfSSaT8+fPH+rqmzZt6uvrmz179lAVlkqlzZs3D3X6Tg3/s1FfXz98nJpOp+fOnTsoNhqYJe20ANESAAAA7AmpVGqnjzhYsGBB8Ptx0qDdbQa+7j/U33n4GUk7nbJULBajaKk6LS0tQyURfX197e3tM2bMGCZa2pV4JR6PDxMt9fT0dHV1tba2DhUthWG4K8HW8KLvyTArK+PxePRtGTgBbeAktf5D0S/fwG794w9lzpw5w5eXSCSamppGeU+/R7QEAAAA48vANGF3mT59+vTp04fvM2fOnCgBGThJp39SzA4bBxom40ilUk1NTfX19cNcfZjUaaeGj1fS6XSlUhkm14vFYjNnzhzY0h/c9HcY9Hbgr9HwVx9mmlhk+ElP459tvAEAAACokt3mAQAAAKiSaAkAAACAKtlrCQCAMVEoFLZt2xYEwezZs2tdCwAwVsxaAgBgrHR1dXV3d4/wgdkAwEQkWgIAYEykUqn6+vowDHt6empdCwAwVkRLAACMlebm5iAIuru7a10IADBWREsAAIyVKFrKZrPFYrHWtQAAY0K0BADAWKmrq8tkMkEQWBMHAJOVaAkAgDEUTVwSLQHAZCVaAgBgDDU1NcVisVwuZ00cAExKoiUAAMZQIpGI1sTZzBsAJiXREgAAY6upqSmwJg4AJinREgAAYytaE5fP562JA4DJR7QEAMDYSiQS6XQ6MHEJACYj0RIAAGMuek6c7ZYAYPIRLQEAMOai7ZasiQOAyUe0BADAmOt/Tpw1cQAwyYiWAADYEzwnDgAmJdESAAB7QrTdUi6XsyYOACYT0RIAAHuCNXEAMCmJlgAA2EOsiQOAyUe0BADAHhJFS7lcrlQq1boWAGD3iIVhWOsaAACYKrq6utLpdCqVqnUhAMDuIVoCAAAAoEoWxAEAAABQJdESAAAAAFUSLQEAAABQJdESAAAAAFUSLQEAAABQJdESAAAAAFUSLQEAAABQJdESAAA1sGXLlrfeequvr6/WhQAAu0S0BABADVQqlXK53NvbW+tCAIBdEgvDsNY1AAAw5RQKhVKplMlkYrFYrWsBAKonWgIAAACgShbEAQAAAFAl0RIAAAAAVRItAQAAAFAl0RIAAAAAVRItAQAAAFAl0RIAAAAAVRItAQBQe2EY1roEAKAadbUuAACAKa23t3fr1q319fWzZ8+udS0AwKiJlgAAqKV4PJ7P50ulUhiGsVis1uUAAKNjQRwAALWUTqfj8Xi5XM7lcrWuBQAYNdESAAC1FIvFGhsbgyDo6+urdS0AwKiJlgAAqLEoWurt7a11IQDAqImWAACosYaGhlgsls/ni8VirWsBAEZHtAQAQI0lEol0Oh2YuAQAE5BoCQCA2rPdEgBMUKIlAABqrz9aqlQqta4FABgF0RIAALWXSqXq6urCMMxms7WuBQAYBdESAADjQlNTU2C7JQCYaERLAACMCw0NDYFoCQAmGtESAADjQkNDQywWK5VKhUKh1rUAACMlWgIAYFyIxWKZTCYwcQkAJhTREgAA40X/c+JqXQgAMFKiJQAAxotou6VsNlupVGpdCwAwIqIlAADGi1QqlUwmwzDMZrO1rgUAGBHREgAA44jnxAGMB6+++uqVV175B3/wB01NTY2NjZ/4xCeuuOKKV199dVC32AgM1bmxsXHhwoXf+MY3Pvjgg+0LyGazd91117HHHjtjxoy6urrW1tbjjjtuyZIlr7zySnV3NLCYUZU9wkr6TzzvvPO2v/p55523/cjDW7FixZ//+Z8vWLCgvr5+zpw5Z5999qpVq6q797EWC8Ow1jUAAMD/6e3t3bhxYzKZ3GeffWpdC8AU9c1vfnPJkiXlcnlQeyKRuP3222+44Yb+lpEEJf2xw1CdZ8+evXr16n333be/ZfPmzSeeeOLatWuHH3BUoqtH54687JFXEo0Zi8Xq6+vff//9GTNm9B/q6OiYO3duPp+P+u+0/kqlctVVV913333DX3H8MGsJAIBxJJPJxGKxYrFYKBRqXQvAVPStb33rpptuqlQqF1100bPPPtvd3d3b27tmzZqLL764UqnceOON3/72t/s7h79vmMbtT9m8efPy5cv322+/TZs2/fVf//XAPjfccMPatWvnz5//ve997913383n8x0dHatXr7799tsPOeSQXb/HkZc92kpOPPHEXC73yCOPDGx8+OGHc7ncSSedNMLylixZct9999XV1d1www3r1q3L5/ObNm16+OGHjz766F246TFk1hIAAONLR0dHKpWKMqZa1wIwtbz77rv7779/oVB44IEHLrzwwkFHv/e97331q19NpVJvvvnmggULtj994MygER595pln/uiP/ugjH/nIpk2b+htbW1vb29tXr159zDHH7OIdjaS2YQ6NvJJokEceeeTcc8894ogjXnjhhf5DRxxxxEsvvfSv//qv55xzzlAX6vfaa68ddNBBlUplh78E45NZSwAAjC8zZsxoaGiQKwHsecuWLSsUCmeeeeYOQ40LL7zwjDPOKBQKy5Yt211XPPTQQ4Mg6OzsHNgY7bh3wAEH7PT0He5eNKotjYY38koip59+ektLy4svvvjyyy9HLS+99NJLL73U0tJy2mmnjWSE73znO5VK5dOf/vREyZUC0RIAAAAQefLJJ4MguOSSS4bqEB362c9+truu+OKLLwZBMGgO1OGHHx4EwUUXXfTGG2/srgtVZ7SV1NfXR9t433///VFL9OL888+vr68fyQgrV64MguDLX/5yVfXWhgVxAAAAQBAEQUtLy7Zt27Zu3drS0rLDDm1tbbNmzWptbW1ra9v+6KgWxLW1tT399NPf+MY31q9fv3Tp0ltuuaW/59NPP/3Zz342l8sFQbDffvsddthhBx988KJFi0444YREIrHTK468caeHqqjklVdeOeyww2bOnLlx48YgCObOndvR0fHKK68ccsghw39/IjNnzuzo6Hj55Zd/+9vf3nXXXb/+9a/r6uo++clPnn322V/72teSyeQw59aKaAkAAAAIgiBIJpOlUqlYLNbV1e2wQ7FYTKVSdXV1xWJx+6MjiZa2d8455zz44IODQpN169bdfvvty5cv7+7u7m9csGDBP/zDP5xxxhkjvJ0R1jZ82SOsZOAgRx555PPPP//II4+EYXjeeecdeeSRa9as2emFInV1deVy+frrr7/zzjsHHTrmmGOefPLJpqamEd3wHiRaAgAAAIJgj8xaGmTBggWPPfZYtO5se+Vy+de//vXatWvXrFnz+OOPv/7667FY7NFHH/2zP/uzkd7SCGobSeKz00oGDrJs2bIrrrjipJNOCsNwxYoVy5Ytu+yyy0Z4oebm5p6enlgs9ulPf/r2228/9NBDi8Xi8uXLr7/++o6Ojuuuu277yKnmREsAAABAEATBUUcd9dxzzz3xxBMnn3zyDjs88cQTn/vc54466qhnn312+6MjXxBXLBbffvvt22677aGHHpo1a9b//u//zp49e/jaKpXKkiVL7rjjjkHPXxuhXYyWdlrJwEE6OzvnzZuXzWaDIMhkMu+///60adNGeKEDDjjgjTfeaG5u/t3vfjdjxoz+9v/8z//84he/+NGPfvSdd94ZYZ17jG28AQAAgCAIgs985jNBEHz3u98dqkN0KOq2K5LJ5IEHHvj973//c5/73JYtW5YsWbLTU+Lx+I033hgEwdq1a3fx6rtop5VMnz79zDPPDMMwDMOzzjorypVG6LDDDguC4MADDxyYKwVBsGjRoiAIPvjgg+rrHjOiJQAAACAIguDyyy9PJpP/8R//8YMf/GD7ow899NAPf/jDVCp1+eWX75bLxWKxb3/723V1dQ8++OBrr7220/7RY9rGw2ZDO63koosuGvRihL7whS8EQfD66693dnYObF+1alUQBPPmzRttqXuAaAkAgPGoUqm0t7e///77tS4EYAr56Ec/+rd/+xAlpbMAAAytSURBVLdBEFxwwQWXXnrpc88919fXl81mn3/++csuu+wrX/lKEAR33HHH3nvvvbuueOCBB371q18tlUoDJy4tXLhwyZIlP/3pT9999918Pp/L5d5+++1777032tjolFNO6e8Zi8W238Jph43VGXklgyxatCiatXT88ceP6opf+tKXPv7xj3d1dS1evPjpp5/u7Oxsa2u7//77/+Iv/iIIgnPPPXcX72gs2GsJAIDxKAzDt956q1Kp7L333ul0utblAEwht91229KlSyuVyqD2eDx+66233nzzzUOdOPK9lgbauHHj/vvvn8vl1qxZ86lPfSoY+llyQRAcdNBBK1asmDNnzjBjjrxxhIeqrmTkFxrohRdeOOmkkwbNWgqC4IQTTnj88cczmczwp+95oiUAAMapbdu2xePxpqamRCJR61oAppa1a9fec889Tz311HvvvReG4YIFC0488cSrr7564cKFw5xVXbQUBMFNN930zW9+8zOf+cyTTz4ZBMFvfvOb5cuXr1q1au3atZs3bw7DsLW1deHChaeeeurFF1888P8bxjpa2sVKRn6hQTZs2HDbbbf95Cc/2bhxYyaTOfjgg88///xLL710fP6FKFoCAAAAoEr2WgIAAACgSqIlAAAAAKokWgIAAACgSqIlAAAAAKokWgIAAACgSqIlAAAAAKokWgIAAACgSqIlAADGtTAMu7u7t2zZUutCAIAdEC0BADDebd68uaOjI5/P17oQgMkvFotFX4cSBEGlUnnggQeOP/742bNnp1KpffbZ5ytf+cozzzzTP8LixYt3OPjixYujEfr99Kc//fznPz9r1qxkMjlnzpwzzjjjZz/72RjfIruZaAkAgHEtFoul0+kgCLLZbK1rAZgqwgG2f3v11Vf/8Ic/vPPOO19//fWenp4nnnjiqKOO+su//Mv+01955ZWXX3550Jgvv/zyK6+8MrBl6dKlN9988+WXX/7aa691dXU9+uij5XL55JNPHvv7Y3eKRT8WAAAwbm3btq2tra2xsXHevHm1rgVgkovFBgcF27c0NTW98847ra2tQ43wj//4jytXrvz3f//3ge1nnXXWiSeeeOWVV0ajPfHEEzfccMPq1aszmczAbn/zN3+zdOnS3XMz7BFmLQEAMN5Fnzqy2az/FgUYD+bNm/fLX/5ymA4XX3zxCy+88Nvf/ra/Zd26dS+++OLFF1/c33L33XcvXbp0UK4UBEF/rvSd73xn//33T6VS+++//3e/+93+DrFY7JFHHjn66KObmpoSiUTU+Nhjjx1++OH19fX77LPP/fffv4s3yKiYtQQAwATw5ptvViqVvffeO1ocB8AYGcmspaeeeuq8887bf//9Fy1adNBBBy1atOhjH/vYoP4PPPDAqlWrvv/970eNF1xwwQknnHDhhRf2jzZr1qzf/OY3s2bN2mEZjz766DXXXPPggw8eeeSRzz333AUXXHDvvfd+4QtfiMY/8MAD77vvvmOOOaahoSEIgmeeeebzn//8vffeu3jx4nXr1p1zzjn33HPPKaecsju/LwxNtAQAwASwcePG3t7e1tbWlpaWWtcCMJmNJFoKgqCvr2/lypXPPvvs2rVr//u///tTn/rUgw8+OGfOnP7+5XL5kEMO+fGPf7zPPvusX79+8eLFv/rVrxKJRP9oyWQym83W1dXtsIzjjjvu+uuvP/XUU6O3jz766N///d//4he/iMZftWrV8ccf39/55JNPvuyyy84888zo7bPPPnvVVVc999xzu+c7ws6IlgAAmAA6Ojq2bNnS0NAwf/78WtcCMJmNMFoaKJfLXXvttZs2bVq+fPnA/o888sgvfvGLe++994orrli0aNE555wz8OisWbNeffXVvfbaa4djtrS0vPnmmzNnzozebtu27eMf/3h7e3s0QjabHTiJddasWW1tbQNPTyQSpVJp9HdPNey1BADABBAtebDdEsA4lE6n77jjjhUrVgxqP/vss9esWfPCCy88//zzX/rSlwYdPfroo1etWlX1FQe+7enp6e7uHvgYO7nSniRaAgBgAkilUolEIgzDbDZb61oAprprrrmmXC4PbNm4cWNzc/OgbvF4/Oabb/7sZz978803x+OD84errrrq1ltv3f5P9VtvvTUIgoMOOmhg8PTzn//8k5/85FD1/OEf/uELL7xQxY2wW4iWAACYGPonLtW6EICp7u677z7yyCOXL1/e2dnZ1dW1YsWKc8899+qrr96+5+mnn75169bTTjtt+0N/8id/8qd/+qfHH3/8j3/8487Ozlwu9z//8z+nnnpq9IS466677pprrlm5cmVPT8/KlSuvvfbaG2+8cah6brnlluuuu27VqlU9PT29vb1PPfXU4sWLd+P9Mjx7LQEAMDF0dXVt2rQpnU7vvffeta4FYNIayV5Lv/zlL//5n/95xYoV7733XiaTOfjggy+55JILL7xwqP7DjPaTn/zk7rvvXrNmTWdnZ2tr63HHHXfllVeedNJJQRAsW7bsrrvueueddz72sY/deOONl1xyyTDj//znP7/lllvWrFlTqVSOOeaYJUuWRIOwB4iWAACYGIrF4vr162Ox2H777bf9wgoAoCb8lQwAwMSQTCaTyaTtlgBgXBEtAQAwYUTbLfX19dW6EADg/4iWAACYMDKZTGAnbwAYT0RLAABMGFG0lM/nBz30GgCoFdESAAATRl1dXSqVCkxcAoBxQ7QEAMBEEm23JFoCgHFCtAQAwEQSrYmzkzcAjBOiJQAAJpJMJhOPx+vq6sIwrHUtAJPcO++88+6770ave3p61q9fH73O5/Nbt24NgqC3t3fDhg0bNmz44IMPBp44sPPWrVvXrVs3zMhBEHR2dpqOOnHF/JUMAMDEEoZhLBardRUAk9xjjz32q1/9qr29fd999z3zzDO//vWvH3roofX19V/84hf/7u/+bsuWLcuXL3/++ef/67/+K5vNPvfcc0888UR04vvvv9/f+YQTTrjtttuOPfbYN998c9myZduPfPXVV3d3d59wwgl/9Vd/deaZZ9budqmeaAkAAADYsa6uriuuuOLYY49duHDhH//xH59++uk/+tGPgiA49dRTly9fHvX5wQ9+UFdXd84550Rv77nnnv7OF1100RtvvHH++ed/7Wtf+7d/+7ftR3744YeXLl3a0tKyYMEC0dIEZUEcAAAAsANhGN5www3XX3/9li1bZs2aNVS3Rx999LTTTnvrrbeef/75bDY7sPMRRxyxevXqa6655pRTTunvMHDklStXfuITn9hrr7320C0xBkRLAAAAwA5cd911Z5111mGHHTZ//vyNGzcGQbD9euQ33nhjwYIF6XR648aN69aty+VyAzvff//9X//61x9++OEf/ehH/R0GjrxixYrVq1c/9NBD999/v+2WJigL4gAAAIDB/umf/um+++477rjjDjjggC9/+cuXX3753LlzDz300FNPPXXp0qWPP/74pZdeetNNN918881nnXXW4Ycf3n9ie3t7f+eFCxfeeeedBx54YG9v77e+9a3tR7722muDIPiXf/mXdDptQdwEJVoCAAAAdiIMw1wul8lkRtu5VCpls9nm5uYxLpCaES0BAAAAUCV7LQEAAABQJdESAAATVblcLpVKta4CAKY00RIAABNSe3v7W2+91d7eXutCAGBKEy0BADAhpVKpIAjMWgKA2rKNNwAAE1IYhpVKJZFI1LoQAJjSREsAAAAAVMmCOAAAAACqJFoCAAAAoEqiJQAAAACqJFoCAAAAoEqiJQAAAACqJFoCAAAAoEqiJQAAAACqJFoCAGBi27x581tvvZXNZmtdCABMRaIlAAAmtnK5XC6XRUsAUBOiJQAAJrZMJhMEgWgJAGpCtAQAwMQWRUu5XC4Mw1rXAgBTjmgJAICJrb6+Ph6PVyqVfD5f61oAYMoRLQEAMOFZEwcAtSJaAgBgwhMtAUCtiJYAAJjw0ul0EAS5XK7WhQDAlCNaAgBgwkun07FYrFwuFwqFWtcCAFOLaAkAgAkvFotFE5esiQOAPUy0BADAZGC7JQCoCdESAACTgWgJAGpCtAQAwGQQbbdUKpVKpVKtawGAKUS0BADAZBCPx+vr6wMTlwBgzxItAQAwSVgTBwB7nmgJAIBJwkPiAGDPEy0BADBJRLOWCoVCuVyudS0AMFWIlgAAmCQSiUQqlQpMXAKAPUi0BADA5GG7JQDYw0RLAABMHlG0lMvlal0IAEwVdbUuAAAAdptMJtPc3BwFTADAHhALw7DWNQAAAAAwIVkQBwAAAECVREsAAAAAVEm0BAAAAECVREsAAAAAVEm0BAAAAECV/h8WiYO98PolyQAAAABJRU5ErkJggg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJQcm9kdWN0TmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIiBDb25maWdMZXZlbD0iMjAwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiwgc2hvd24gaW4gdGhlIHdlYiBpbnRlcmZhY2UsIHRhYnMgYW5kIHRpdGxlIGJhciBvZiB0aGUgd2ViIGJyb3dzZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+T1RSUzo6SVRTTSA2PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpWaWV3TW9kZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZXRlcm1pbmVzIHRoZSB3YXkgdGhlIGxpbmtlZCBvYmplY3RzIGFyZSBkaXNwbGF5ZWQgaW4gZWFjaCB6b29tIG1hc2suPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiIFNlbGVjdGVkSUQ9IkNvbXBsZXgiPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSJTaW1wbGUiIFRyYW5zbGF0YWJsZT0iMSI+U2ltcGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSJDb21wbGV4IiBUcmFuc2xhdGFibGU9IjEiPkNvbXBsZXg8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iUGFja2FnZTo6UmVwb3NpdG9yeUxpc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSIgQ29uZmlnTGV2ZWw9IjIwMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbnMgY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290cnMvcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OlBhY2thZ2U8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaHR0cDovL2Z0cC5vdHJzLm9yZy9wdWIvb3Rycy9pdHNtL3BhY2thZ2VzNi8iPk9UUlM6OklUU00gNiBNYXN0ZXI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290cnNfY29uZmlnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+YWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIHByaW9yaXR5IG1hdHJpeC48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5Dcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbklUU01DSVBBbGxvY2F0ZSMjIzAwMy1JVFNNQ29yZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uVGFibGUuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZG1pbklUU01DSVBBbGxvY2F0ZSMjIzAwMy1JVFNNQ29yZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRtaW4gYXJlYSBuYXZpZ2F0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkFkbWluT3ZlcnZpZXc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+YWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+Q3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5NYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4LjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbkJpZyI+ZmEtdGFibGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25TbWFsbCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gJ0RlcGVuZHNPbicsIGFuZCB0aGUgRGlyZWN0aW9uIGlzICdTb3VyY2UnLCBvbmx5ICdEZXBlbmRzIG9uJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rICdSZXF1aXJlZCBmb3InKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiAnSW5jbHVkZXMnIHdpdGggdGhlIGRpcmVjdGlvbiAnVGFyZ2V0Jy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlICdTb3VyY2UnLCAnVGFyZ2V0Jywgb3IgJ0JvdGgnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTITwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SVRTTUNvcmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVwZW5kc09uIiBUcmFuc2xhdGFibGU9IjEiPkJvdGg8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI0FsdGVybmF0aXZlVG8iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnQWx0ZXJuYXRpdmVUbycuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5BbHRlcm5hdGl2ZSB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5BbHRlcm5hdGl2ZSB0bzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjQ29ubmVjdGVkVG8iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnQ29ubmVjdGVkVG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+Q29ubmVjdGVkIHRvPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXROYW1lIiBUcmFuc2xhdGFibGU9IjEiPkNvbm5lY3RlZCB0bzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjRGVwZW5kc09uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0RlcGVuZHNPbicuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5EZXBlbmRzIG9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXROYW1lIiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIGZvcjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjSW5jbHVkZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnSW5jbHVkZXMnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+SW5jbHVkZXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UGFydCBvZjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjUmVsZXZhbnRUbyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdSZWxldmFudFRvJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlJlbGV2YW50IHRvPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXROYW1lIiBUcmFuc2xhdGFibGU9IjEiPlJlbGV2YW50IHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdBbHRlcm5hdGl2ZVRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnQ29ubmVjdGVkVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Db25uZWN0ZWRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjAyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdJbmNsdWRlcycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkluY2x1ZGVzPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UmVsZXZhbnRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjIwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ0FsdGVybmF0aXZlVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjIxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIyMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI0MCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnQWx0ZXJuYXRpdmVUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjQxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkRlcGVuZHNPbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjQyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNjAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjYxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1BhcmVudENoaWxkJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlBhcmVudENoaWxkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNjIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyODAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdTZXJ2aWNlJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI4MSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ1NlcnZpY2UnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1BhcmVudENoaWxkJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI4MiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ1NlcnZpY2UnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzM0MDAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNV29ya09yZGVyJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDIwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNoYW5nZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01DaGFuZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+Tm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU006OkZyb250ZW5kOjpUZXh0QXJlYSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5XaWR0aCBvZiBJVFNNIHRleHRhcmVhcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeWzAtOV17MSwzfSQiPjc4PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjSW5jaWRlbnRTdGF0ZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6R2VuZXJhbENhdGFsb2c8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPklUU006OkNvcmU6OkluY2lkZW50U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPkluY2lkZW50IFN0YXRlIFR5cGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2MiIFRyYW5zbGF0YWJsZT0iMSI+SW5jaWRlbnQgU3RhdGUgVHlwZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Indhcm5pbmciIFRyYW5zbGF0YWJsZT0iMSI+V2FybmluZzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJvcGVyYXRpb25hbCIgVHJhbnNsYXRhYmxlPSIxIj5PcGVyYXRpb25hbDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpbmNpZGVudCIgVHJhbnNsYXRhYmxlPSIxIj5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByZWZLZXkiPkZ1bmN0aW9uYWxpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5PcHRpb248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uQ1NTIyMjMTAwLUlUU00iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5TZWFyY2guY3NzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1JVFNNIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLmpzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3Ryc19jb25maWc+Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBTZXJ2aWNlIE92ZXJ2aWV3LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudElUU01TZXJ2aWNlIyMjMDAzLUlUU01TZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuU2VydmljZS5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWdlbnRJVFNNU2VydmljZSMjIzAwMy1JVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlLUFyZWE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U2VydmljZXM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5NZW51PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5JdGVtQXJlYTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4zMTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgT3ZlcnZpZXc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNU2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rT3B0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY2Vzc0tleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TTEEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBTTEEgT3ZlcnZpZXcuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlNMQTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNU0xBIyMjMDAzLUlUU01TZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuU0xBLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNBZ2VudElUU01TTEEjIyMwMDMtSVRTTVNlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TTEEgT3ZlcnZpZXc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U0xBPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TTEE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlIFpvb20uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+Wm9vbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50SVRTTVNlcnZpY2Vab29tIyMjMDAzLUlUU01TZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BbGxvY2F0aW9uTGlzdC5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLlRhYmxlLlNvcnQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkxpbmtPYmplY3QuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuU2VydmljZVpvb20uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlNlcnZpY2UgUHJpbnQuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TTEFab29tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TTEEgWm9vbS48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5ab29tPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNU0xBWm9vbSMjIzAwMy1JVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LlNMQVpvb20uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU0xBUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TTEEgUHJpbnQuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01TZXJ2aWNlOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TZXJ2aWNlUHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlUHJpbnQ7U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMyMDAtTGluayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6Okxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNU2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50TGlua09iamVjdDtTb3VyY2VPYmplY3Q9U2VydmljZTtTb3VyY2VLZXk9WyUgRGF0YS5TZXJ2aWNlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDAwLUJhY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU0xBOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TTEFNZW51OjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNU0xBPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01TTEE6Ok1lbnVNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNMQU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TTEFQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNMQVByaW50O1NMQUlEPVslIERhdGEuU0xBSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZTo6U2V0dGluZ3NWaXNpYmlsaXR5IyMjU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+QWdlbnRJVFNNU2VydmljZVpvb208L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZSMjI1NlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpTZXJ2aWNlLnBtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Q29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tbWVudCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyaXRpY2FsaXR5Ij4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZSI+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tbWVudCI+MTEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjEyMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcml0aWNhbGl0eSI+MTMwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZSI+MTQwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjE1MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4xNjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdHJzX2NvbmZpZz4K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OlNlcnZpY2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWxsb3dzIGRlZmluaW5nIHNlcnZpY2VzIGFuZCBTTEFzIGZvciB0aWNrZXRzIChlLiBnLiBlbWFpbCwgZGVza3RvcCwgbmV0d29yaywgLi4uKSwgYW5kIGVzY2FsYXRpb24gYXR0cmlidXRlcyBmb3IgU0xBcyAoaWYgdGlja2V0IHNlcnZpY2UvU0xBIGZlYXR1cmUgaXMgZW5hYmxlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpUaWNrZXQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3Ryc19jb25maWc+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6YmdfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfQmtGA0LjRgtC40YfQvdC+0YHRguKGlNCS0LvQuNGP0L3QuNC14oaU0J/RgNC40L7RgtC40YLQtdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ9Cc0LjQvdC40LzQsNC70L3QviDQstGA0LXQvNC1INC80LXQttC00YMg0LjQvdGG0LjQtNC10L3RgtC40YLQtSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ9Ca0YDQuNGC0LjRh9C90L7RgdGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0J/QvtGB0LvQtdC00L3QsCDQv9GA0L7QvNGP0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQn9C+0YHQu9C10LTQvdC+INC/0YDQvtC80LXQvdC10L0g0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ9Ch0LLRitGA0LfQsNC90LggU0xBINC00L7Qs9C+0LLQvtGA0LgnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfQktC70LjRj9C90LjQtSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ9Cj0YHQu9GD0LPQuCDQt9CwINC60YDQsNC50L3QuCDQv9C+0YLRgNC10LHQuNGC0LXQu9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9Ca0LvQuNC10L3RgtGB0LrQsCDRgdC40YHRgtC10LzQsC9Gcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ9Ce0YHQvdC+0LLQvdCwINGB0LjRgdGC0LXQvNCwL0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0JjQoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfQntGC0YfQtdGC0L3QvtGB0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICfQmNCiINCe0L/QtdGA0LDRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn0J/RgNC+0LXQutGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9Ce0YHQvdC+0LLQtdC9INC00L7Qs9C+0LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn0JTRgNGD0LPQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfQlNC+0YHRgtGK0L/QvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn0JLRgNC10LzQtSDQt9CwINC+0YLQs9C+0LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfQktGA0LXQvNC1INC30LAg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfQktGA0LXQvNC1INC30LAg0YDQsNC30YDQtdGI0LDQstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfQodC00LXQu9C60Lgv0YLRgNCw0L3Qt9Cw0LrRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn0JPRgNC10YjQutC4JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfQkNC70YLQtdGA0L3QsNGC0LjQstC10L0g0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9Ch0LLRitGA0LfQsNC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC4INC+0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQtdC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn0KfQsNGB0YIg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9Ch0YrQvtGC0LLQtdGC0LXQvSDRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQndC10L7QsdGF0L7QtNC40Lwg0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+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+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6Y3NfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0acSNbm9zdOKGlFZsaXbihpRQcmlvcml0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBbG9rYWNlIHByaW9yaXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbcOhbG7DrSDEjWFzIG1lemkgaW5jaWRlbnR5JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGnEjW5vc3QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBJbmZvcm1hY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTmFwb3NsZWR5IHptxJtuxJtuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ05hcG9zbGVkeSB6bcSbbmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQxZlpxZlhemVuw6kgU2x1xb5ieSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdQxZlpxZlhemVuw6kgU0xBIHNtbG91dnknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdWbGl2JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdTb3XEjWFzbsO9IFN0YXYgSW5jaWRlbnR1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXYgSW5jaWRlbnR1JzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhxI1uw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2x1xb5ieSBrb25jb3bDvW0gdcW+aXZhdGVsxa9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ1rDoWthem5pY2vDqSByb3pocmFuw60vRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdaw6FrbGFkbsOtIHJvemhyYW7DrS9CYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfFmMOtemVuw60gSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgT3BlcmFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnVWvDoXprYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdaw6FrbGFkbsOtIHNtbG91dmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdEYWzFocOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3R1cG5vc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ8SMYXMgb2Rwb3bEm2RpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfEjGFzIG9ibm92eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfEjGFzIMWZZcWhZW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdDaHlieSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm7DrSBrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnU3BvamVuIHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdaw6F2aXPDrSBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnWmFocm51amUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnxIzDoXN0IHonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldmFudG7DrSBrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1Bvxb5hZG92YW7DvSBwcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBIFDFmWVobGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdQxZllaGxlZCBTbHXFvmJ5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnUHJvc3RvciDDmmRyxb5ieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+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+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGFfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0aWthbGl0ZXQg4oaUIFDDpXZpcmtuaW5nIOKGlCBQcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXN0aWQgbWVsbGVtIEluY2lkZW50cyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1NpZHN0IMOmbmRyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lkc3Qgw6ZuZHJldCBhZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnVGlsa255dHRlZGUgc2VydmljZXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnVGlsa255dHRlZGUgU0xBcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1DDpXZpcmtuaW5nJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIEluY2lkZW50IHRpbHN0YW5kJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50IHRpbHN0YW5kJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGlvbmVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0t1bmRlc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBvcGVyYXRpb25lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcmxpZ2dlbmRlIGtvbnRyYWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQW5kcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVGlsZ8OmbmdlbGlnaGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZWFrdGlvbnN0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0dlbmV0YWJsZXJpbmdzdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0zDuHNuaW5nc3JhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWpsJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0ZvcmJ1bmRldCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBZmjDpm5nZXIgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luZGtsdWRlcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGFmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0tyw6Z2ZXMgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQSBvdmVyc2lndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnU2VydmljZSBvdmVyc2lndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2Ugb21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+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+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0aWthbGl0w6R0IOKGlCBBdXN3aXJrdW5nIOKGlCBQcmlvcml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdWZXJ3YWx0dW5nIGRlciBQcmlvcml0w6R0IGF1cyBkZXIgS29tYmluYXRpb24gdm9uIEtyaXRpa2FsaXTDpHQg4oaUIEltcGFjdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXTDpHQgenVvcmRuZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5kZXN0emVpdCB6d2lzY2hlbiBJbmNpZGVudHMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0w6R0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdadWxldHp0IGdlw6RuZGVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdadWxldHp0IGdlw6RuZGVydCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1p1Z2Vow7ZyaWdlIFNlcnZpY2VzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1NlcnZpY2UtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWVsbGVyIFZvcmZhbGxzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnWnVnZWjDtnJpZ2UgU0xBcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0F1c3dpcmt1bmcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICdLZWluZSBTTEFJRCB2b3JoYW5kZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdTTEFJRCAiJXMiIGluIGRlciBEYXRlbmJhbmsgbmljaHQgZ2VmdW5kZW4hICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICdLZWluZSBTZXJ2aWNlSUQgdm9yaGFuZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1NlcnZpY2VJRCAiJXMiIGluIGRlciBEYXRlbmJhbmsgbmljaHQgZ2VmdW5kZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdBa3R1ZWxsZXIgVm9yZmFsbHNzdGF0dXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnVm9yZmFsbHNzdGF0dXMnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdWb3JmYWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdBbndlbmRlci1TZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBCZXRyaWViJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ1NvbnN0aWdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdWZXJmw7xnYmFya2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnUmVha3Rpb25zemVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnV2llZGVyaGVyc3RlbGx1bmdzemVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdMw7ZzdW5nc3plaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWhsZXInOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXYgenUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ0JlaWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1ZlcmJ1bmRlbiBtaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IHdlbGNoZSBTcGFsdGVuIGltIFdpZGdldCAiVmVya27DvHBmdGUgU2VydmljZXMiIGFuZ2V6ZWlndCB3ZXJkZW4gKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gSGlud2VpczogRXMgc2luZCBudXIgU2VydmljZWVpZ2Vuc2NoYWZ0ZW4gYWxzIERlZmF1bHQtU3BhbHRlbiBlcmxhdWJ0LiBNw7ZnbGljaGUgV2VydGU6IDAgPSBEZWFrdGl2aWVydCwgMSA9IFZlcmbDvGdiYXIsIDIgPSBTdGFuZGFydG3DpMOfaWcgYWt0aXZpZXJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnSMOkbmd0IGFiIHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kbW9kdWwtUmVnaXN0cmF0aW9uIGRlciBBZG1pbklUU01DSVBBbGxvY2F0ZSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBUHJpbnQtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNMQVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNlcnZpY2UtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVByaW50LU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0lUU00gU0xBLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNNLURpZW5zdMO8YmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdWb3JmYWxsc3RhdHVzLVR5cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ1ZvcmZhbGxzc3RhdHVzLVR5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdCZWluaGFsdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnUHJpb3JpdMOkdHMtTWF0cml4IHZlcndhbHRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnw5xiZXIgZGllc2VzIE1vZHVsIHdpcmQgZGVyIFp1csO8Y2stTGluayBpbiBkZXIgTGlua2xlaXN0ZSBkZXIgU0xBLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBadXLDvGNrLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnw5xiZXIgZGllc2VzIE1vZHVsIHdpcmQgZGVyIExpbmstTGluayBpbiBkZXIgTGlua2xlaXN0ZSBkZXIgU2VydmljZS1BbnNpY2h0IGFuZ2V6ZWlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgRHJ1Y2tlbi1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTTEEtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBEcnVja2VuLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0ZXIgZnVlciBkZW4gVm9yZmFsbHNzdGF0dXMgaW4gZGVyIEFuc2ljaHQgZnVlciBkaWUgRWluc3RlbGx1bmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1RlaWwgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZsO8cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdCZW7DtnRpZ3QgZsO8cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtw5xiZXJzaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnU0xBLURydWNrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEEgWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ0RpZW5zdMO8YmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdEaWVuc3QgRHJ1Y2tlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ0RpZW5zdCBab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdTZXJ2aWNlLUJlcmVpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNoYW5nZVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUGFyZW50Q2hpbGRcJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdTZXJ2aWNlXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IFwnVGlja2V0XCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUmVsZXZhbnRUb1wnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQ29ubmVjdGVkVG9cJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnSW5jbHVkZXNcJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Xb3JrT3JkZXJcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ1NlcnZpY2VcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1BhcmVudENoaWxkXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ1NlcnZpY2VcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUmVsZXZhbnRUb1wnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGVuIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnQ29ubmVjdGVkVG9cJy4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSBkZXIgZ2xlaWNoZSBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gdW5nZXJpY2h0ZXRlciBMaW5rdHlwLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIHZlcnNjaGllZGVuZXIgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIGdlcmljaHRldGVyIExpbmt0eXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnRGVwZW5kc09uXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnSW5jbHVkZXNcJy4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSBkZXIgZ2xlaWNoZSBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gdW5nZXJpY2h0ZXRlciBMaW5rdHlwLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIHZlcnNjaGllZGVuZXIgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIGdlcmljaHRldGVyIExpbmt0eXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ1JlbGV2YW50VG9cJy4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSBkZXIgZ2xlaWNoZSBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gdW5nZXJpY2h0ZXRlciBMaW5rdHlwLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIHZlcnNjaGllZGVuZXIgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIGdlcmljaHRldGVyIExpbmt0eXAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0FuemFobCBkZXIgWmVpY2hlbiBwcm8gWmVpbGUgaW4gSVRTTS1UZXh0QXJlYXMuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdDcml0aWNpZGFkIOKGlCBJbXBhY3RvIOKGlCBQcmlvcmlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ0dlc3Rpb25hIGxhIHByaW9yaWRhZCByZXN1bHRhZG8gZGUgbGEgY29tYmluYWNpw7NuIGRlIENyaXRpY2lkYWQg4oaUIEltcGFjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0FzaWduYXIgcHJpb3JpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGllbXBvIG3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ1VyZ2VuY2lhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZGVsIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1vIGNhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1vIGNhbWJpbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpY2lvcyBBc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBTZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGFjdHVhbCBkZWwgaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSBBc29jaWFkb3MnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnwqFObyBzZSBoYSBmYWNpbGl0YWRvIFNMQUlEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnwqFTTEFJRCAlcyBubyBzZSBlbmNvbnRyw7MgZW4gbGEgYmFzZSBkZSBkYXRvcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJ0NhbGVuZGFyaW8gcG9yIGRlZmVjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJ8KhTm8gc2UgaGEgZmFjaWxpdGFkbyBlbCBTZXJ2aWNlSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzIG5vIHNlIGVuY29udHLDsyBlbiBsYSBiYXNlIGRlIGRhdG9zISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSBBY3R1YWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlbCBJbmNpZGVudGUnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmFjaW9uYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpY2lvIGRlIFVzdWFyaW8gRmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhY2nDs24gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnSW5mb3JtZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpw7NuIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm95ZWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBjb24gVGVyY2Vyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdUaWVtcG8gZGUgUmVzcHVlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUaWVtcG8gZGUgUmVjdXBlcmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdUYXNhIGRlIFJlc29sdWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWNjaW9uZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3Jlcyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnQW1ib3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29uZWN0YWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluaXIgYWNjaW9uZXMgZG9uZGUgZXN0w6EgZGlzcG9uaWJsZSB1biBib3TDs24gZGUgY29uZmlndXJhY2nDs24gZW4gZWwgd2lkZ2V0IGRlIG9iamV0b3MgdmluY3VsYWRvcyAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBUZW5nYSBlbiBjdWVudGEgcXVlIGVzdGFzIGFjY2lvbmVzIGRlYmVuIGhhYmVyIHJlZ2lzdHJhZG8gbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3MgSlMgeSBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIHkgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5hIHF1w6kgY29sdW1uYXMgc2UgbXVlc3RyYW4gZW4gZWwgd2lkZ2V0IGRlIHNlcnZpY2lvcyB2aW5jdWxhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGE6IFPDs2xvIHNlIHBlcm1pdGVuIGF0cmlidXRvcyBkZSBzZXJ2aWNpbyBwYXJhIGNvbHVtbmFzIHByZWRldGVybWluYWRhcy4gQWp1c3RlcyBwb3NpYmxlczogMCA9IERlc2FjdGl2YWRvLCAxID0gRGlzcG9uaWJsZSwgMiA9IEFjdGl2YWRvIGRlIGZvcm1hIHByZWRldGVybWluYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRGVwZW5kZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgbGEgY29uZmlndXJhY2nDs24gZGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZW4gZWwgw6FyZWEgZGUgYWRtaW5pc3RyYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEFab29tIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNlcnZpY2Vab29tIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0Rlc2NyaXBjacOzbiBkZSBJVFNNIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnVmlzacOzbiBnZW5lcmFsIGRlbCBzZXJ2aWNpbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1eWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdBZG1pbmlzdHJhciBsYSBtYXRyw616IGRlIHByaW9yaWRhZGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZWwgZWxlbWVudG8gZGUgbWVuw7ogVm9sdmVyIGVuIGVsIG1lbsO6IFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVsIGVsZW1lbnRvIGRlIG1lbsO6IFZvbHZlciBlbiBtZW7DuiBzZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBlbCBlbmxhY2UgYWwgbWVuw7ogZWxlbWVudG8gZW4gbWVuw7ogc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZWwgZWxlbWVudG8gZGUgbWVuw7ogSW1wcmltaXIgZW4gZWwgbWVuw7ogU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBlbCBlbGVtZW50byBkZSBtZW7Dum4gSW1wcmltaXIgZW4gZWwgbWVuw7ogc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXLDoW1ldHJvcyBwYXJhIGxvcyBlc3RhZG9zIGRlIGxvcyBpbmNpZGVudGVzIGVuIGxhIHZpc3RhIGRlIHByZWZlcmVuY2lhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRlIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWVyaWRvIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVmlzdGEgZ2VuZXJhbCBkZWwgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdJbXByaW1pciBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ0FtcGxpYXIgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnRGVzY3JpcGNpw7NuIGRlIFNlcnZpY2lvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ0ltcHJpbWlyIFNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnQW1wbGlhciBTZXJ2aWNpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2lvLcOBcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ0VzdGFibGV6Y2EgZWwgdGlwbyB5IGxhIGRpcmVjY2nDs24gZGUgbG9zIGVubGFjZXMgcXVlIHNlIHVzYXLDoW4gcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGUgbGEgaW5jaWRlbmNpYS4gTGEgY2xhdmUgZXMgZWwgbm9tYnJlIGRlbCB0aXBvIGRlIGVubGFjZSAoY29tbyBzZSBkZWZpbmUgZW4gTGlua09iamVjdDo6VHlwZSksIHkgZWwgdmFsb3IgZXMgbGEgZGlyZWNjacOzbiBkZWwgSW5jaWRlbnRMaW5rVHlwZSBxdWUgc2UgZGViZSBzZWd1aXIgcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGUgbGEgaW5jaWRlbmNpYS4gUG9yIGVqZW1wbG8sIHNpIGVsIEluY2lkZW50TGlua1R5cGUgZXN0w6EgZmlqYWRvIGVuICJEZXBlbmRlIGRlIiAgeSBsYSBkaXJlY2Npw7NuIGVzICJPcmlnZW4iLCBzb2xvIHNlIHNlZ3VpcsOhbiBsb3MgZW5sYWNlcyAiRGVwZW5kZSBkZSIgKHkgbm8gZWwgZW5sYWNlIG9wdWVzdG8gIlJlcXVlcmlkbyBwYXJhIiksIHBhcmEgY2FsY3VsYXIgZWwgZXN0YWRvIGRlIGxhIGluY2lkZW5jaWEuIFB1ZWRlIGFncmVnYXIgbcOhcyB0aXBvcyBkZSBlbmxhY2VzIHkgZGlyZWNjaW9uZXMgc2kgbG8gZGVzZWEsIHBvciBlamVtcGxvICJJbmNsdWRlcyIgY29uIGxhIGRpcmVjY2nDs24gIm9iamV0aXZvIi4gVG9kb3MgbG9zIHRpcG9zIGRlIGVubGFjZXMgZGVmaW5pZG9zIGVuIGxhcyBvcGNpb25lcyBkZSBzeXNjb25maWcgTGlua09iamVjdDo6VHlwZSBzb24gcG9zaWJsZXMgeSBsYSBkaXJlY2Npw7NuIHB1ZWRlIHNlciAiT3JpZ2VuIiwgIk9iamV0aXZvIiBvICJBbWJhcyIuIElNUE9SVEFOVEU6IFRSQVMgUkVBTElaQVIgTE9TIENBTUJJT1MgRU4gRVNUQSBPUENJw5NOIERFIFNZU0NPTkZJRywgTkVDRVNJVEEgRUpFQ1VUQVIgRUwgQ09NQU5ETyBERSBDT05TT0xBIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFBBUkEgUVVFIFRPRE9TIExPUyBFU1RBRE9TIFNFIFJFQ0FMQ1VMRU4gRU4gQkFTRSBBIExBUyBOVUVWQVMgQ09ORklHVVJBQ0lPTkVTLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ2hhbmdlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3Ryb3Mgb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdDb25uZWN0ZWRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvcyBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0luY2x1ZGVzXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ1NlcnZpY2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdTZXJ2aWNlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ1NlcnZpY2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQWx0ZXJuYXRpdmVUb1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdDb25uZWN0ZWRUb1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnRGVwZW5kc09uXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0luY2x1ZGVzXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLiBTaSBlbCBTb3VyY2VOYW1lIHkgZWwgVGFyZ2V0TmFtZSBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBubyBkaXJlY2Npb25hZG8uIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gZGlyZWNjaW9uYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdEZWZpbmUgZWwgYW5jaG8gZGUgbGFzIHRleHRhcmVhcyBkZWwgSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfTVhfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdDcml0aWNpZGFkIOKGlCBJbXBhY3RvIOKGlCBQcmlvcmlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ0FkbWluaXN0cmFyIGVsIHJlc3VsdGFkbyBkZSBsYSBjb21iaW5hY2nDs24gZGUgcHJpb3JpZGFkIENyaXRpY2lkYWQg4oaUIEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBc2lnbmFjacOzbiBkZSBQcmlvZGlkYWQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUaWVtcG8gTcOtbmltbyBFbnRyZSBJbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltbyBjYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnw5psdGltbyBjYW1iaW8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aWNpb3MgQXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkZWwgU2VydmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0VzdGFkbyBhY3R1YWwgZGVsIGluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIFJlbGFjaW9uYWRvcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIHByb3BvcmNpb27DsyBlbCBcJ1NMQUlEXCchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfCoUVsIFwnU0xBSURcJyAlcyBubyBzZSBlbmNvbnRyw7MgZW4gbGEgYmFzZSBkZSBkYXRvcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJ0NhbGVuZGFyaW8gcG9yIG9taXNpw7NuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIHByb3BvcmNpb27DsyBlbCAgXCdTZXJ2aWNlSURcJyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfCoUVsIFwnU2VydmljZUlEXCcgJXMgbm8gc2UgZW5jb250csOzIGVuIGxhIGJhc2UgZGUgZGF0b3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGVsIEluY2lkZW50ZSBBY3R1YWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlbCBJbmNpZGVudGUnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmFjaW9uYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpY2lvIGRlIFVzdWFyaW8gZmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnQgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFjayBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0FkbWluaXN0cmFjacOzbiBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ09wZXJhY2lvbmVzIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm95ZWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBkZSByZXNwYWxkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ090cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG9uaWJpbGlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RpZW1wbyBkZSBSZXNwdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RpZW1wbyBkZSBSZWFjdGl2YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1BvcmNlbnRhamUgZGUgUmVzb2x1Y2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhY2Npb25lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcmVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2byBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICdBbWJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBBY2Npb25lcyBkb25kZSBlbCBib3TDs24gZGUgY29uZmlndXJhY2lvbmVzIGVzdGEgZGlzcG9uaWJsZSBlbiBlbCAid2lkZ2V0IiBkZSBvYmpldG9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUG9yIGZhdm9yIG5vdGUgcXVlIGRpY2hhcyBBY2Npb25lcyBkZWJlbiB0ZW5lciByZWdpc3RyYWRvcyBsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBKUyB5IENTUzogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0RlZmluZSBjdWFsZXMgY29sdW1uYXMgc2UgbXVlc3RyYW4gZW4gZWwgXCd3aWRnZXRcJyBkZSBTZXJ2aWNpb3MgdmluY3VsYWRvcyAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLsKgTm90YTogU29sbyBhdHJpYnV0b3MgZGUgU2VydmljaW8gZG8gcGVybWl0aWRvcyBwYXJhIGxhcyBDb2x1bW5hcyBwb3Igb21pc2nDs24uIENvbmZpZ3VyYWNpb25lcyBwb3NpYmxlczogMCA9IERlc2hhYml0YWRvLCAgMSA9IERpc3BvbmlibGUsIDIgPSBIYWJpbGl0YWRvIHBvciBvbWlzacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBsYSBjb25maWd1cmFjacOzbiBBZG1pbklUU01DSVBBbGxvY2F0ZSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU0xBWm9vbSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgUmVnaXN0cm8gZW4gZWwgRnJvbnRlZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TZXJ2aWNlIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgUmVnaXN0cm8gZW4gZWwgRnJvbnRlZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdWaXN0YSBnZW5lcmFsIGRlIFwnU0xBXCcgZGUgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnVmlzdGEgZ2VuZXJhbCBkZSBTZXJ2aWNpb3MgZGUgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1eWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdBZG1pbmlzdHJhciBtYXRyaXogZGUgcHJpb3JpZGFkZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVuIGVubGFjZSBkZSByZWdyZXNvIGVuIGVsIG1lbsO6IGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVuIGVubGFjZSBkZSByZWdyZXNvIGVuIGVsIG1lbsO6IGRlbCBzZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVsIGVubGFjZSBlbiBlbCBtZW7DuiBkZSBzZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciB1biBlbmxhY2UgZGUgaW1wcmVzacOzbiBlbiBlbCBtZW7DuiBkZSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVuIGVubGFjZSBkZSBpbXByZXNpw7NuIGVuIGVsIG1lbsO6IGRlIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgcGFyYSBlbCBlc3RhZG8gZGUgaW5jaWRlbnRlcyBlbiBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ0FwbGljYWJsZSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVlcmlkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Jlc3VtZW4gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdJbXByaW1pciBcJ1NMQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdEZXRhaWxlZCBkZSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdSZXN1bWVuIGRlIFNlcnZpY2lvICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ0ltcHJpbWlyIFNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnRGV0YWxsZXMgZGVsIFNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdTZXJ2aWNpby3DgXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICdGaWphIGVsIHRpcG8geSBkaXJlY2Npb24gZGUgbG9zIHbDrW5jdWxvcyBhIHNlciB1c2Fkb3MgcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGUgaW5jaWRlbmNpYS4gTGEgbGxhdmUgZXMgZWwgbm9tYnJlIGRlbCB0aXBvIGRlIHbDrW5jdWxvIChjb21vIGVzdMOhIGRlZmluaWRvIGVuICBMaW5rT2JqZWN0OjpUeXBlKSwgeSBlbCB2YWxvciBlcyBsYSBkaXJlY2Npb24gZGVsIFwnSW5jaWRlbnRMaW5rVHlwZVwnIHF1ZSBkZWJlcsOhIGRlIHNlciBzZWd1aWRvIHBhcmEgY2FsY3VsYXIgZWwgZXN0YWRvIGRlIGluY2lkZW5jaWEuIFBvciBlamVtcGxvIHNpIGVsICBcJ0luY2lkZW50TGlua1R5cGVcJyBlc3TDoSBmaWphZG8gYSBcJ0RlcGVuZHNPTlwnIHkgbGEgZGlyZWNjaW9uIGVzIFwnRnVlbnRlXCcuIHPDs2xvIGxvcyB2w61uY3Vsb3MgXCdEZXBlbmRzT25cJyBzZXLDoW4gc2VndWlkb3MgKHkgbm8gcG9yIGVsIGNvbnRyYXJpbyBzdSBvcHVlc3RvIFwnUmVxdWlyZWRGb3JcJykgcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGUgaW5jaWRlbmNpYS4gVXN0ZWQgcHVlZGUgYcOxYWRpciB0YW50b3MgdGlwb3MgZGUgdsOtbmN1bG9zIHkgZGlyZWNjaW9uZXMgY29tbyBzZWEgbmVjZXNhcmlvLCBwb3IgZWplbXBsbyBcJ0luY2x1ZGVzXCcgY29uIGxhIGRpcmVjY2nDs24gXCdEZXN0aW5vXCcuIFRvZG9zIGxvcyB0aXBvcyBkZSB2w61uY3Vsb3MgZGVmaW5pZG9zIGVuIGxhcyBvcGNpb25lcyBkZSAgY29uZmlndXJhY2nDs24gZWwgc2lzdGVtYSAgTGlua09iamVjdDo6VHlwZSBzb24gcG9zaWJsZXMgeSBzdSBkaXJlY2Npw7NuIHB1ZWRlIHNlciBcJ0Z1ZW50ZVwnLCBcJ0Rlc3Rpbm9cJyBvIFwnQW1ib3NcJy4gSU1QT1JUQU5URTogREVTUFVFUyBERSBIQUNFUiBDQU1CSU9TIEEgRVNUQSBPUENJw5NOIERFIFwnU1lTQ09ORklHXCcgTkVDRVNJVEFSw4EgRUpFQ1VUQVIgZWwgQ09NQU5ETyBERSBDT05TT0xBIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlwqAgwqFERSBUQUwgRk9STUEgUVVFIFRPRE9TIExPUyBFU1RBRE9TIERFIElOQ0lERU5DSUEgU0VSw4FOIFJFQ0FMQ1VMQURPUyBCQVNBRE9TIEVOIExBIE5VRVZBIENPTkZJR1VSQUNJw5NOISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01DaGFuZ2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdUaWNrZXRcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdGQVFcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnU2VydmljZVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnVGlja2V0XCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnVGlja2V0XCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnVGlja2V0XCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3RybyBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdDb25uZWN0ZWRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3RybyBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm8gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0luY2x1ZGVzXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3RybyBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIGVubGF6YWRvIGNvbiBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIGVubGF6YWRvIGNvbiBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIGVubGF6YWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHRpcG8gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnU2VydmljaWVcJyBwdWVkZSBzZXIgZW5sYXphZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdTZXJ2aWNpZVwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdTZXJ2aWNpZVwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBlbCB0aXBvIGRlIGVubGFjZSBcJ0FsdGVybmF0aXZlVG9cJy4gU2kgZWwgbm9tYnJlIGRlbCAgb3JpZ2VuIHkgZWwgbm9tYnJlIGRlbCBkZXN0aW5vIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW5vIG5vLWRpcmVjY2lvbmFsLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW4gZW5sYWNlIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgZWwgdGlwbyBkZSBlbmxhY2UgXCdDb25uZWN0ZWRUb1wnLiBTaSBlbCBub21icmUgZGVsICBvcmlnZW4geSBlbCBub21icmUgZGVsIGRlc3Rpbm8gY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1bm8gbm8tZGlyZWNjaW9uYWwuIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1biBlbmxhY2UgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgZWwgdGlwbyBkZSBlbmxhY2UgXCdEZXBlbmRzT25cJy4gU2kgZWwgbm9tYnJlIGRlbCAgb3JpZ2VuIHkgZWwgbm9tYnJlIGRlbCBkZXN0aW5vIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW5vIG5vLWRpcmVjY2lvbmFsLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW4gZW5sYWNlIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgZWwgdGlwbyBkZSBlbmxhY2UgXCdJbmNsdWRlc1wnLiBTaSBlbCBub21icmUgZGVsICBvcmlnZW4geSBlbCBub21icmUgZGVsIGRlc3Rpbm8gY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1bm8gbm8tZGlyZWNjaW9uYWwuIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1biBlbmxhY2UgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIGVsIHRpcG8gZGUgZW5sYWNlIFwnUmVsZXZhbnRUb1wnLiBTaSBlbCBub21icmUgZGVsICBvcmlnZW4geSBlbCBub21icmUgZGVsIGRlc3Rpbm8gY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1bm8gbm8tZGlyZWNjaW9uYWwuIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1biBlbmxhY2UgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0FuY2hvIGRlIGxhcyDDoXJlYXMgZGUgdGV4dG8gZGVsIElUU00nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmFfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfYp9mH2YXbjNiqIOKGlCDYp9ir2LEg4oaUINin2YjZhNmI24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAn2YXYr9uM2LHbjNiqINin2YTZiNuM2Kog2YbYp9i024wg2KfYsiDYqtix2qnbjNioINin2YfZhduM2Kog4oaUINin2KvYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn2KrYrti124zYtSDYp9mE2YjbjNiqJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn2K3Yr9in2YLZhCDYstmF2KfZhiDYqNuM2YYg2K/ZiCDYsdiu2K/Yp9ivJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn2KfZh9mF24zYqic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAn2KfYt9mE2KfYudin2KogU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9ii2K7YsduM2YYg2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfYotiu2LHbjNmGINiq2LrbjNuM2LEg2KrZiNiz2LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ9iz2LHZiNuM2LPigIzZh9in24wg2YXYsdiq2KjYtyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICfYp9i32YTYp9i52KfYqiDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfZiNi22LnbjNiqINqp2YbZiNmG24wg2LHYrtiv2KfYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEHZh9in24wg2YXYsdiq2KjYtyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9in2KvYsSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCDYsdiu2K/Yp9ivJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2LHYrtiv2KfYryc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfYudmF2YTbjNin2KrbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn2LPYsdmI24zYsyDaqdin2LHYqNixINmG2YfYp9uM24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn2KzZhNmIINi12K3ZhtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn2b7YtNiqINi12K3ZhtmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfZhdiv24zYsduM2KogSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn2q/Ystin2LHYtNuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAn2LnZhdmE24zYp9iqIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfZhtmF2KfbjNi0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfZvtix2YjamNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9mC2LHYp9ix2K/Yp9ivINii2YXYp9iv2Ycg2obYp9m+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn2KjZgtuM2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn2YXbjNiy2KfZhiDYr9ixINiv2LPYqtix2LMg2KjZiNiv2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ9iy2YXYp9mGINm+2KfYs9iu2q/ZiNuM24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ9iy2YXYp9mGINio2YfYqNmI2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn2YbYsdiuINit2YQg2YXYs9im2YTZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfYqtix2KfaqdmG2LTigIzZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9iu2LfYp9mH2KcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ9is2KfbjNqv2LLbjNmG24wg2KjYsdin24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfZhdiq2LXZhCDYp9iz2Kog2KjZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ9mI2KfYqNiz2KrZhyDYp9iz2Kog2KjZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wgQWRtaW5JVFNNQ0lQQWxsb2NhdGUg2K/YsSDYqNiu2LQg2YXYr9uM2LHbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TTEFQcmludCDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TTEFab29tINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNlcnZpY2Ug2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlUHJpbnQg2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNlcnZpY2Vab29tINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfZhdi02KrZhdmEINin2LPYqiDYqNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAn2YXYr9uM2LHbjNiqINmF2KfYqtix24zYsyDYp9mE2YjbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDYqNin2LLar9i02Kog2K/YsSDZhdmG2YjbjCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDYqNin2LLar9i02Kog2K/YsSDZhdmG2YjbjCDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAn2YXYp9qY2YjZhNuMINio2LHYp9uMINmG2YXYp9uM2LQg2YTbjNmG2qkg2obYp9m+INiv2LEg2YXZhtmI24wgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINqG2KfZviDYr9ixINmF2YbZiNuMINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ9m+2KfYsdin2YXYqtix2YfYp9uM24wg2KjYsdin24wg2YjYtti524zYquKAjNmH2KfbjCDYsdiu2K/Yp9ivINiv2LEg2YbZhdin24wg2KrZhti424zZhdin2Kog2LTYrti124wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9io2K7YtNuMINin2LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfZhdix2KrYqNi3INio2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn2YXZiNix2K8g2YbbjNin2LIg2KfYs9iqINio2LHYp9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ9iu2YTYp9i12YcgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfYrtmE2KfYtdmHINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfYqNiu2LQg2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+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/Yp9iy2Ycg2LnYsdi2INqp2YbYqtix2YTigIzZh9in24wg2YjYsdmI2K8g2YXYqtmGIElUU00nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZnJfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdDcml0aWNpdMOpIOKGlCBJbXBhY3Qg4oaUIFByaW9yaXTDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnR2VzdGlvbiBkZSBsYSBwcmlvcml0w6kgcGFyIGNvbWJpbmFpc29uIENyaXRpY2l0w6kg4oaUIEltcGFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXR0cmlidXRpb24gZGUgcHJpb3JpdMOpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcHMgbWluaW1hbCBlbnRyZSBsZXMgaW5jaWRlbnRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaXTDqSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXRpb24gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBwYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpY2VzIGFzc29jacOpcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hdGlvbiBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFdGF0IGFjdHVlbCBkZSBsXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIGFzc29jacOpZXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0V0YXQgYWN0dWVsIGRcJ2luY2lkZW50JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0V0YXQgZFwnaW5jaWRlbnQnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3DDqXJhdGlvbm5lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2aWNlIHV0aWxpc2F0ZXVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnR2VzdGlvbiBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3DDqXJhdGlvbnMgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0TDqW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdCBleHRlcm5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQXV0cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG9uaWJpbGl0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBzIGRlIHLDqXBvbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUZW1wcyBkZSByw6lwYXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdUYXV4IGRlIHLDqXNvbHV0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWN0aW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJldXJzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2ZSDDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpw6kgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEw6lwZW5kIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXN0aW9uIGRlIGxhIG1hdHJpY2UgZGUgcHJpb3JpdMOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbcOodHJlcyBkZXMgw6l0YXRzIGRcJ2luY2lkZW50IGRhbnMgbGEgdnVlIGRlcyBwcsOpZsOpcmVuY2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydCBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ0NvcnJlc3BvbmQgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzIHBvdXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVnVlIGRcJ2Vuc2VtYmxlIGRlcyBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1Z1ZSBkXCdlbnNlbWJsZSBkZXMgc2VydmljZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdab25lIGRlIHNlcnZpY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdJVFNNQ2hhbmdlXCcgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgXCdUaWNrZXRcJyBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuIFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdJVFNNQ29uZmlnSXRlbVwnIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0IFwnRkFRXCcgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdJVFNNQ29uZmlnSXRlbVwnIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0IFwnRkFRXCcgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiBcJ1BhcmVudEVuZmFudFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgXCdJVFNNV29ya09yZGVyXCcgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgXCdJVFNNQ29uZmlnSXRlbVwnIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCBcJ0lUU01Xb3JrT3JkZXJcJyBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCBcJ1NlcnZpY2VcJyBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuIFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCBcJ0lUU01Xb3JrT3JkZXJcJyBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCBcJ1RpY2tldFwnIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0IFwnU2VydmljZVwnIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0IFwnRkFRXCcgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCBcJ1NlcnZpY2VcJyBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCBcJ0ZBUVwnIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gXCdQYXJlbnRFbmZhbnRcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdMYXJnZXVyIGRlcyB6b25lcyBkZSB0ZXh0ZSBJVFNNJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6Z2xfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdDcml0aWNpZGFkIOKGlCBJbXBhY3RvIOKGlCBQcmlvcmlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdNYW5leGFyIG9zIHJlc3VsdGFkb3MgcHJpb3JpdGFyaW9zIGRhIGNvbWJpbmFjacOzbiBDcml0aWNpZGFkIOKGlCBJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBc2lnbmFjacOzbiBkYSBwcmlvcmlkYWQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUZW1wbyBtw61uaW1vIGVudHJlIEluY2lkZW50ZXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdDcml0aWNpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZG8gQWNvcmRvIGRvIE5pdmVsIGRlIFNlcnZpem8gQU5TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ8OabHRpbW8gY2FtYmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbW8gY2FtYmlvIGZlaXRvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2Vydml6b3MgYXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkbyBTZXJ2aXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gYWN0dWFsIGRvIGluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdBTlMgYXNvY2lhZG9zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0byc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRvIEluY2lkZW50ZSBhY3R1YWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRvIEluY2lkZW50ZSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdGdW5jaW9uYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpem8gdXN1YXJpbyBmaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdJbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdJbmZyYWVzdHJ1dHVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnWGVzdGnDs24gVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnSW5mb3JtZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpw7NuIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm94ZWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBkZSBzb3BvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3V0cm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3Bvw7FpYmlsaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRlIHJlc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUZW1wbyBkZSByZWN1cGVyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0luZGljZSBkZSByZXNvbHVjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FjY2nDs25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0Vycm9zJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2YSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29uZWN0YWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmV4aXN0cm8gTcOzZHVsbyBGcm9udEVuZCBwYXJhIMOzIEFkbWluSVRTTUNJUCBkYSBjb25maWd1cmFjacOzbiBhc2lnbmFkYSBuYSDDoXJlYSBkZSBhZG1pbmlzdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JleGlzdHJvIE3Ds2R1bG8gRnJvbnRFbmQgcGFyYSDDsyBvYnhldG8gQWdlbnRJVFNNU0xBIG5hIGludGVyZmFjZSBkbyBheGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmV4aXN0cm8gTcOzZHVsbyBGcm9udEVuZCBwYXJhIMOzICBvYnhldG8gaW1wcmltaXIgQWdlbnRJVFNNU0xBIG5hIGludGVyZmFjZSBkbyBheGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZXhpc3RybyBNw7NkdWxvIEZyb250RW5kIHBhcmEgw7MgIG9ieGV0byB6b29tIEFnZW50SVRTTVNMQSBuYSBpbnRlcmZhY2UgZG8gYXhlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmV4aXN0cm8gTcOzZHVsbyBGcm9udEVuZCBwYXJhIMOzICBvYnhldG8gc2Vydml6byBBZ2VudElUU01TTEEgbmEgaW50ZXJmYWNlIGRvIGF4ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmV4aXN0cm8gTcOzZHVsbyBGcm9udEVuZCBwYXJhIMOzICBvYnhldG8gc2Vydml6byBpbXByaW1pciBBZ2VudElUU00gbmEgaW50ZXJmYWNlIGRvIGF4ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZXhpc3RybyBNw7NkdWxvIEZyb250RW5kIHBhcmEgw7MgIG9ieGV0byBzZXJ2aXpvIHpvb20gQWdlbnRJVFNNIG5hIGludGVyZmFjZSBkbyBheGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ2luY2zDumUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdNYW5leGFyIGEgcHJpb3JpZGFkZSBkYSBtYXRyaXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVubGFjZSBwb3N0ZXJpb3IgZW4gbWVuw7ogZG8gQU5TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZW5sYWNlIHBvc3RlcmlvciBlbiBtZW7DuiBkZSBzZXJ2aXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZW5sYWNlIMOzIGVubGFjZSBubyBtZW7DuiBkZSBzZXJ2aXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZW5sYWNlIGRlIGltcHJlc2nDs24gbm8gbWVuw7ogZG8gQU5TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVubGFjZSBkZSBpbXByZXNpw7NuIG5vIG1lbsO6IGRlIHNlcnZpem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcsOhbWV0cm9zIHBhcmEgb3MgZXN0YWRvcyBkbyBpbmNpZGVudGUgbmEgdmlzdGEgZGUgcHJlZmVyZW5jaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRlIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlyaWRvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdWaXN0YSB4ZXJhbCBkbyBBY29yZG8gZG8gTml2ZWwgZGUgU2Vydml6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnVmlzdGEgeGVyYWwgZG8gc2Vydml6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ8OBcmVhIGRvIHNlcnZpem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIHVuIG9ieGVjdG8gZGUgXCdJVFNNQ2hhbmdlXCcgcG9kZSBzZXIgY29uZWN0YWRvIGNvbiBvYnhlY3RvcyBcJ1RpY2tldFwnIHF1ZSB1dGlsaXphbiBvIHRpcG8gZGUgZW5sYWNlIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSB1biBvYnhlY3RvIGRlIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciBjb25lY3RhZG8gY29uIG9ieGVjdG9zIGRlIFwnRkFRXCcgcXVlIHV0aWxpemFuIG8gdGlwbyBkZSBlbmxhY2UgXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBxdWUgdW4gb2J4ZWN0byBkZSBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgY29uZWN0YWRvIGNvbiBvYnhlY3RvcyBkZSBcJ0ZBUVwnIHF1ZSB1dGlsaXphbiBvIHRpcG8gZGUgZW5sYWNlIGRlIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSB1biBvYnhlY3RvIGRlIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciBjb25lY3RhZG8gY29uIG9ieGVjdG9zIGRlIFwnRkFRXCcgcXVlIHV0aWxpemFuIG8gdGlwbyBkZSBlbmxhY2UgZGUgXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIHVuIG9ieGVjdG8gZGUgXCdJVFNNQ29uZmlnSXRlbVwnIHBvZGUgc2VyIGNvbmVjdGFkbyBjb24gb2J4ZWN0b3MgZGUgXCdTZXJ2aWNlXCcgcXVlIHV0aWxpemFuIG8gdGlwbyBkZSBlbmxhY2UgZGUgXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBxdWUgdW4gb2J4ZWN0byBkZSBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgY29uZWN0YWRvIGNvbiBvYnhlY3RvcyBkZSBcJ1NlcnZpY2VcJyBxdWUgdXRpbGl6YW4gbyB0aXBvIGRlIGVubGFjZSBkZSBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSB1biBvYnhlY3RvIGRlIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciBjb25lY3RhZG8gY29uIG9ieGVjdG9zIGRlIFwnU2VydmljZVwnIHF1ZSB1dGlsaXphbiBvIHRpcG8gZGUgZW5sYWNlIGRlIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG91dHJvcyBvYnhldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgdmluY3VsYWRvIGNvbiBvdXRyb3Mgb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnQ29ubmVjdGVkVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgdmluY3VsYWRvIGNvbiBvdXRyb3Mgb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgdmluY3VsYWRvIGNvbiBvdXRyb3Mgb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnSW5jbHVkZXNcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBxdWUgbyBvYnhldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb3V0cm9zIG9ieGV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTVdvcmtPcmRlclwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdTZXJ2aWNlXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTVdvcmtPcmRlclwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ1NlcnZpY2VcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ1NlcnZpY2VcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdGQVFcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnU2VydmljZVwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ0ZBUVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ1BhcmVudENoaWxkXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnU2VydmljZVwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ0ZBUVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ0FsdGVybmF0aXZlVG9cJy4gU2UgbyBub21lIGZvbnRlIGUgbyBub21lIGRvIG9ieGV0aXZvIGNvbnRlw7FlbiBvIG1lc21vIHZhbG9yLCBhIHZpbmN1bGFjacOzbiByZXN1bHRhbnRlIMOpIHVuaGEgbm9uIGRpcmVjY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBhIHZpbmN1bGFjacOzbiByZXN1bHRhbnRlIMOpIHVuaGEgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ0Nvbm5lY3RlZFRvXCcuIFNlIG8gbm9tZSBmb250ZSBlIG8gbm9tZSBkbyBvYnhldGl2byBjb250ZcOxZW4gbyBtZXNtbyB2YWxvciwgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIG5vbiBkaXJlY2Npb25hbC4gU2Ugb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcuIFNlIG8gbm9tZSBmb250ZSBlIG8gbm9tZSBkbyBvYnhldGl2byBjb250ZcOxZW4gbyBtZXNtbyB2YWxvciwgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIG5vbiBkaXJlY2Npb25hbC4gU2Ugb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdJbmNsdWRlc1wnLiBTZSBvIG5vbWUgZm9udGUgZSBvIG5vbWUgZG8gb2J4ZXRpdm8gY29udGXDsWVuIG8gbWVzbW8gdmFsb3IsIGEgdmluY3VsYWNpw7NuIHJlc3VsdGFudGUgw6kgdW5oYSBub24gZGlyZWNjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGEgdmluY3VsYWNpw7NuIHJlc3VsdGFudGUgw6kgdW5oYSBkaXJlY2Npb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdSZWxldmFudFRvXCcuIFNlIG8gbm9tZSBmb250ZSBlIG8gbm9tZSBkbyBvYnhldGl2byBjb250ZcOxZW4gbyBtZXNtbyB2YWxvciwgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIG5vbiBkaXJlY2Npb25hbC4gU2Ugb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdBbmNodXJhIGRhcyDDoXJlYXMgZGUgdGV4dG8gZGEgSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aHVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0aWt1c3PDoWcg4oaUIEhhdMOhcyDihpQgUHJpb3JpdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnQSBLcml0aWt1c3PDoWcg4oaUIEhhdMOhcyDDtnNzemV0w6l0ZWwgcHJpb3JpdMOhcyBlcmVkbcOpbnnDqW5layBrZXplbMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdQcmlvcml0w6FzIGxlZm9nbGFsw6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnQXogaW5jaWRlbnNlayBrw7Z6dGkgbGVna2lzZWJiIGlkxZEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWt1c3PDoWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBpbmZvcm3DoWNpw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1V0b2xzw7MgbcOzZG9zw610w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1V0b2xqw6FyYSBtw7Nkb3PDrXRvdHRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdIb3p6w6FyZW5kZWx0IHN6b2xnw6FsdGF0w6Fzb2snOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnU3pvbGfDoWx0YXTDoXMgaW5mb3Jtw6FjacOzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnSmVsZW5sZWdpIGluY2lkZW5zw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnSG96esOhcmVuZGVsdCBTTEEtayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0hhdMOhcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJ05pbmNzIFNMQS1hem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnQSh6KSAlcyBTTEEtYXpvbm9zw610w7MgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICdBbGFww6lydGVsbWV6ZXR0IG5hcHTDoXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJ05pbmNzIHN6b2xnw6FsdGF0w6FzYXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBKHopICVzIHN6b2xnw6FsdGF0w6FzYXpvbm9zw610w7MgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdKZWxlbmxlZ2kgaW5jaWRlbnPDoWxsYXBvdCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVuc8OhbGxhcG90JzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ8OcemVta8OpcGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1bDqWdmZWxoYXN6bsOhbMOzaSBzem9sZ8OhbHRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdFbMWRdMOpdHByb2dyYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdIw6F0dMOpcnByb2dyYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIG1lbmVkenNtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ0plbGVudMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIMO8emVtZWx0ZXTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0JlbXV0YXTDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdNZWdhbGFwb3rDsyBzemVyesWRZMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0VnecOpYic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdFbMOpcmhldMWRc8OpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVsOhbGFzemlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0hlbHlyZcOhbGzDrXTDoXNpIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnTWVnb2xkw6FzaSBhcsOhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnpha2Npw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0hpYsOhayc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXTDrXZhIGVycmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ01pbmRrZXR0xZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ3NhdGxha296dGF0dmEgaWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdNxbF2ZWxldGVrIG1lZ2hhdMOhcm96w6FzYSwgYWhvbCBlZ3kgYmXDoWxsw610w6Fzb2sgZ29tYiDDqXJoZXTFkSBlbCBhIGthcGNzb2x0IG9iamVrdHVtb2sgZmVsw7xsZXRpIGVsZW1lbiAoTGlua09iamVjdDo6Vmlld01vZGUgPSDigJ7DtnNzemV0ZXR04oCdKS4gTmUgZmVsZWRqZSwgaG9neSBlemVrbmVrIGEgbcWxdmVsZXRla25layByZW5kZWxrZXpuacO8ayBrZWxsIGEga8O2dmV0a2V6xZEgSlMgw6lzIENTUyBmw6FqbG9rIHJlZ2lzenRyw6Fsw6Fzw6F2YWw6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIMOpcyBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdBbm5hayBtZWdoYXTDoXJvesOhc2EsIGhvZ3kgbWVseSBvc3psb3BvayBsZWd5ZW5layBsw6F0aGF0w7NrIGEga2FwY3NvbHQgc3pvbGfDoWx0YXTDoXNvayBmZWzDvGxldGkgZWxlbWVuIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9IOKAnsO2c3N6ZXRldHTigJ0pLiBNZWdqZWd5esOpczogY3NhayBzem9sZ8OhbHRhdMOhcyBhdHRyaWLDunR1bW9rIGVuZ2Vkw6lseWV6ZXR0ZWsgYXogYWxhcMOpcnRlbG1lemV0dCBvc3psb3Bva27DoWwuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gbGV0aWx0dmEsIDEgPSBlbMOpcmhldMWRLCAyID0gYWxhcMOpcnRlbG1lemV0dGVuIGVuZ2Vkw6lseWV6ZXR0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRXR0xZFsIGbDvGdnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IGFkbWluaXN6dHLDoWNpw7NzIHRlcsO8bGV0ZW4gbMOpdsWRIGtyaXRpa3Vzc8OhZyDihpQgaGF0w6FzIOKGlCBwcmlvcml0w6FzIGxlZm9nbGFsw6FzIGJlw6FsbMOtdMOhc2hvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gbMOpdsWRIFNMQSBvYmpla3R1bWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgU0xBIG55b210YXTDoXMgb2JqZWt0dW1ob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgU0xBIG5hZ3nDrXTDoXMgb2JqZWt0dW1ob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgc3pvbGfDoWx0YXTDoXMgb2JqZWt0dW1ob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGzDqXbFkSBzem9sZ8OhbHRhdMOhcyBueW9tdGF0w6FzIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGzDqXbFkSBzem9sZ8OhbHRhdMOhcyBuYWd5w610w6FzIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdJVFNNIFNMQSDDoXR0ZWtpbnTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNNIHN6b2xnw6FsdGF0w6FzIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ0luY2lkZW5zw6FsbGFwb3QgdMOtcHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnSW5jaWRlbnPDoWxsYXBvdCB0w61wdXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnVGFydGFsbWF6emEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdQcmlvcml0w6FzbcOhdHJpeCBrZXplbMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdFZ3kgbW9kdWwgYSBWaXNzemEgbWVuw7xwb250IG1lZ2plbGVuw610w6lzw6loZXogYXogU0xBIG1lbsO8YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ0VneSBtb2R1bCBhIFZpc3N6YSBtZW7DvHBvbnQgbWVnamVsZW7DrXTDqXPDqWhleiBhIHN6b2xnw6FsdGF0w6FzIG1lbsO8YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ0VneSBtb2R1bCBheiDDlnNzemVrYXBjc29sw6FzIG1lbsO8cG9udCBtZWdqZWxlbsOtdMOpc8OpaGV6IGEgc3pvbGfDoWx0YXTDoXMgbWVuw7xiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnRWd5IG1vZHVsIGEgTnlvbXRhdMOhcyBtZW7DvHBvbnQgbWVnamVsZW7DrXTDqXPDqWhleiBheiBTTEEgbWVuw7xiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ0VneSBtb2R1bCBhIE55b210YXTDoXMgbWVuw7xwb250IG1lZ2plbGVuw610w6lzw6loZXogYSBzem9sZ8OhbHRhdMOhcyBtZW7DvGJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtw6l0ZXJlayBheiBpbmNpZGVuc8OhbGxhcG90b2tob3ogYSBiZcOhbGzDrXTDoXNvayBuw6l6ZXRiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdSw6lzemUgZW5uZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldsOhbnMgZXp6ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnU3rDvGtzw6lnZXMgZWhoZXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBIMOhdHRla2ludMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnU0xBIG55b210YXTDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ1NMQSBuYWd5w610w6FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnU3pvbGfDoWx0YXTDoXMgw6F0dGVraW50w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnU3pvbGfDoWx0YXTDoXMgbnlvbXRhdMOhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1N6b2xnw6FsdGF0w6FzIG5hZ3nDrXTDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1N6b2xnw6FsdGF0w6FzIHRlcsO8bGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ8OBbGzDrXRzYSBiZSBhIGhpdmF0a296w6Fzb2sgdMOtcHVzw6F0IMOpcyBpcsOhbnnDoXQsIGhvZ3kgaGFzem7DoWxoYXTDsyBsZWd5ZW4gYXogaW5jaWRlbnPDoWxsYXBvdCBraXN6w6Ftw610w6Fzw6Fob3ouIEEga3VsY3MgYSBoaXZhdGtvesOhc3TDrXB1cyBuZXZlIChhaG9neSBhIExpbmtPYmplY3Q6OlR5cGUgw6lydMOpa8OpYmVuIHZhbiBtZWdoYXTDoXJvenZhKSwgw6lzIGF6IMOpcnTDqWsgYXogSW5jaWRlbnRMaW5rVHlwZSBpcsOhbnlhLCBhbWVseWV0IGvDtnZldG5pZSBrZWxsIGF6IGluY2lkZW5zw6FsbGFwb3Qga2lzesOhbcOtdMOhc8OhaG96LiBQw6lsZMOhdWwgaGEgYXogSW5jaWRlbnRMaW5rVHlwZSDigJ5EZXBlbmRzT27igJ0gw6lydMOpa3JlIHZhbiDDoWxsw610dmEsIMOpcyBheiBpcsOhbnkg4oCeU291cmNl4oCdLCBha2tvciBjc2FrIGEg4oCeRGVwZW5kcyBvbuKAnSBoaXZhdGtvesOhc29rIGxlc3puZWsga8O2dmV0dmUgKMOpcyBuZW0gYXogZWxsZW50w6l0ZXMg4oCeUmVxdWlyZWQgZm9y4oCdIGhpdmF0a296w6FzKSBheiBpbmNpZGVuc8OhbGxhcG90IGtpc3rDoW3DrXTDoXPDoWhvei4gSG96esOhYWRoYXQgdG92w6FiYmkgaGl2YXRrb3rDoXN0w61wdXNva2F0IMOpcyBpcsOhbnlva2F0LCBhaG9neSBjc2FrIHN6ZXJldG7DqSwgcMOpbGTDoXVsIOKAnkluY2x1ZGVz4oCdIGEg4oCeVGFyZ2V04oCdIGlyw6FubnlhbC4gTWluZGVuIExpbmtPYmplY3Q6OlR5cGUgcmVuZHN6ZXJiZcOhbGzDrXTDoXNpIGxlaGV0xZFzw6lnYmVuIG1lZ2hhdMOhcm96b3R0IGhpdmF0a296w6FzdMOtcHVzIGxlaGV0c8OpZ2VzLCDDqXMgYXogaXLDoW55IOKAnlNvdXJjZeKAnSwg4oCeVGFyZ2V04oCdIHZhZ3kg4oCeQm90aOKAnSBsZWhldC4gRk9OVE9TOiBNSVVUw4FOIE3Dk0RPU8ONVMOBU09LQVQgSEFKVE9UVCBWw4lHUkUgRVpFTiBBIFJFTkRTWkVSQkXDgUxMw41Uw4FTT04sIExFIEtFTEwgRlVUVEFUTklBIEEgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgS09OWk9MUEFSQU5DU09UIEFaw4lSVCwgSE9HWSBNSU5ERU4gSU5DSURFTlPDgUxMQVBPVCDDmkpSQSBLSVNaw4FNw41Uw4FTUkEgS0VSw5xMSsOWTiBBWiDDmkogQkXDgUxMw41Uw4FTT0sgQUxBUErDgU4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNoYW5nZeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5GQVHigJ0gb2JqZWt0dW1va2thbCBhIOKAnk5vcm1hbOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5GQVHigJ0gb2JqZWt0dW1va2thbCBhIOKAnlBhcmVudENoaWxk4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlNlcnZpY2XigJ0gb2JqZWt0dW1va2thbCBheiDigJ5BbHRlcm5hdGl2ZVRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeU2VydmljZeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlNlcnZpY2XigJ0gb2JqZWt0dW1va2thbCBhIOKAnlJlbGV2YW50VG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5UaWNrZXTigJ0gb2JqZWt0dW1va2thbCBheiDigJ5BbHRlcm5hdGl2ZVRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5UaWNrZXTigJ0gb2JqZWt0dW1va2thbCBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUmVsZXZhbnRUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIG3DoXMg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBheiDigJ5BbHRlcm5hdGl2ZVRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIG3DoXMg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBhIOKAnkNvbm5lY3RlZFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5EZXBlbmRzT27igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgbcOhcyDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bW9ra2FsIGF6IOKAnkluY2x1ZGVz4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgbcOhcyDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUmVsZXZhbnRUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNV29ya09yZGVy4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGF6IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5EZXBlbmRzT27igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTVdvcmtPcmRlcuKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBheiDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTVdvcmtPcmRlcuKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlNlcnZpY2XigJ0gb2JqZWt0dW1va2thbCBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Xb3JrT3JkZXLigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Xb3JrT3JkZXLigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5UaWNrZXTigJ0gb2JqZWt0dW1va2thbCBhIOKAnk5vcm1hbOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeU2VydmljZeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnlNlcnZpY2XigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5GQVHigJ0gb2JqZWt0dW1va2thbCBhIOKAnlBhcmVudENoaWxk4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeU2VydmljZeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUmVsZXZhbnRUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnIGF6IOKAnkFsdGVybmF0aXZlVG/igJ0gaGl2YXRrb3rDoXN0w61wdXN0LiBIYSBhIGZvcnLDoXNuw6l2IGEgY8OpbG7DqXYgdWd5YW5henQgYXogw6lydMOpa2V0IHRhcnRhbG1henphLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIG5lbSBsZXN6IGlyw6FuecOtdG90dC4gSGEgYXogw6lydMOpa2VrIGVsdMOpcm5laywgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBpcsOhbnnDrXRvdHQgaGl2YXRrb3rDoXMgbGVzei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnIGEg4oCeQ29ubmVjdGVkVG/igJ0gaGl2YXRrb3rDoXN0w61wdXN0LiBIYSBhIGZvcnLDoXNuw6l2IGEgY8OpbG7DqXYgdWd5YW5henQgYXogw6lydMOpa2V0IHRhcnRhbG1henphLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIG5lbSBsZXN6IGlyw6FuecOtdG90dC4gSGEgYXogw6lydMOpa2VrIGVsdMOpcm5laywgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBpcsOhbnnDrXRvdHQgaGl2YXRrb3rDoXMgbGVzei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZyBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYXog4oCeSW5jbHVkZXPigJ0gaGl2YXRrb3rDoXN0w61wdXN0LiBIYSBhIGZvcnLDoXNuw6l2IGEgY8OpbG7DqXYgdWd5YW5henQgYXogw6lydMOpa2V0IHRhcnRhbG1henphLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIG5lbSBsZXN6IGlyw6FuecOtdG90dC4gSGEgYXogw6lydMOpa2VrIGVsdMOpcm5laywgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBpcsOhbnnDrXRvdHQgaGl2YXRrb3rDoXMgbGVzei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzdC4gSGEgYSBmb3Jyw6FzbsOpdiBhIGPDqWxuw6l2IHVneWFuYXp0IGF6IMOpcnTDqWtldCB0YXJ0YWxtYXp6YSwgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBuZW0gbGVzeiBpcsOhbnnDrXRvdHQuIEhhIGF6IMOpcnTDqWtlayBlbHTDqXJuZWssIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgaXLDoW55w610b3R0IGhpdmF0a296w6FzIGxlc3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0F6IElUU00gc3rDtnZlZ2RvYm96b2sgc3rDqWxlc3PDqWdlLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aWRfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0aWthbGl0YXPihpREYW1wYWvihpRQcmlvcml0YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ01lbmdlbG9sYSBoYXNpbCBtZW1wcmlvcml0YXNrYW4ga29tYmluYXNpIEtyaXRpa2FsaXRhcyDihpQgRGFtcGFrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBbG9rYXNpIFByaW9yaXRhcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1dha3R1IG1pbmltYWwgYW50YXJhIGluc2lkZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0YXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzaSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnVGVyYWtoaXIgZGl1YmFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1RlcmFraGlyIGRpcnViYWggb2xlaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnTGF5YW5hbiB5YW5nIHRlcmthaXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXNpIExheWFuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ1N0YXR1cyBpbnNpZGVuIHNhYXQgaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSB5YW5nIHRlcmthaXQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdEYW1wYWsnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXR1cyBpbnNpZGVuIHNhYXQgaW5pJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXR1cyBpbnNpZGVuJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ29wZXJhc2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnaW5zaWRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnTGF5YW5hbiBwZW5nZ3VuYSBha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udCBlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrIGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnUGVuZ2Vsb2xhIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ01lbGFwb3JrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXNpb25hbCBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3llayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdNZW5kYXNhcmkga29udHJhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0xhaW4tbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdLZXRlcnNlZGlhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1dha3R1IE1lcmVzcG9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdXYWt0dSBQZW11bGloYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGluZ2thdCBSZXNvbHVzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2Frc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnS2VzYWxhaGFuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGlmIHVudHVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICdLZWR1YS1kdWFueWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnVGVyaHVidW5nIGtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnVGVyZ2FudHVuZyBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdQZW5kYWZ0YXJhbiBtb2R1bCBGcm9udGVuZCB1bnR1ayBrb25maWd1cmFzaSBBZG1pbklUU01DSVBBbGxvY2F0ZSBwYWRhIGRhZXJhaCBhZG1pbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BlbmRhZnRhcmFuIG1vZHVsIEZyb250ZW5kIHVudHVrIG9iamVrIEFnZW50SVRTTVNMQSBwYWRhIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZW5kYWZ0YXJhbiBtb2R1bCBGcm9udGVuZCB1bnR1ayBvYmplayBBZ2VudElUU01TTEFQcmludCBwYWRhIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BlbmRhZnRhcmFuIG1vZHVsIEZyb250ZW5kIHVudHVrIG9iamVrIEFnZW50SVRTTVNMQVpvb20gcGFkYSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZW5kYWZ0YXJhbiBtb2R1bCBGcm9udGVuZCB1bnR1ayBvYmplayBBZ2VudElUU01TZXJ2aWNlIHBhZGEgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZW5kYWZ0YXJhbiBtb2R1bCBGcm9udGVuZCB1bnR1ayBvYmplayBBZ2VudElUU01TZXJ2aWNlUHJpbnQgcGFkYSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVuZGFmdGFyYW4gbW9kdWwgRnJvbnRlbmQgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZVpvb20gcGFkYSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnS2VzZWx1cnVoYW4gSVRTTSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ0xheWFuYW4ga2VzZWx1cnVoYW4gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnSW5zaWRlbiBqZW5pcyBzdGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ0plbmlzIGluc2lkZW4gc3RhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdUZXJtYXN1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0tlbG9sYSBtYXRyaWtzIHByaW9yaXRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVuYW1waWxrYW4gdGF1dGFuIGtlbWJhbGkgZGkgbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVuYW1waWxrYW4gdGF1dGFuIGtlbWJhbGkgZGkgbWVudSBsYXlhbmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbmFtcGlsa2FuIHRhdXRhbiBsaW5rIGRpIG1lbnUgbGF5YW5hbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW5hbXBpbGthbiB0YXV0YW4gY2V0YWsgZGkgbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbmFtcGlsa2FuIHRhdXRhbiBjZXRhayBkaSBtZW51IGxheWFuYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0ZXIgdW50dWsgc3RhdHVzIGluc2lkZW4gZGkgdGFtcGlsYW4gcGlsaWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ0JhZ2lhbiBkYXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnQmVyaHVidW5nYW4gZGVuZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0RpcGVybHVrYW4gdW50dWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnR2FtYmFyYW4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdTTEEgUHJpbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnWm9vbSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ0dhbWJhcmFuIExheWFuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdMYXlhbmFuIHByaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICdMYXlhbmFuIFpvb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnRGFlcmFoLUxheWFuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNoYW5nZVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdUaWtldFwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdGQVFcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ2hhbmdlXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0ZBUVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdGQVFcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnU2VydmljZVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1NlcnZpY2VcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdTZXJ2aWNlXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnVGlja2V0XCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdUaWNrZXRcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1RpY2tldFwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnVGlja2V0XCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdDb25uZWN0ZWRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnRGVwZW5kT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnSW5jbHVkZXNcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNV29ya09yZGVyXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNV29ya09yZGVyXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Xb3JrT3JkZXJcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnU2VydmljZVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNV29ya09yZGVyXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1NlcnZpY2VcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNV29ya09yZGVyXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1RpY2tldFwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ1NlcnZpY2VcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnRkFRXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdTZXJ2aWNlXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0ZBUVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ1BhcmVudENoaWxkXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ1NlcnZpY2VcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnRkFRXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIHRpcGUgdGF1dGFuIFwnQWx0ZXJuYXRpdmVUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHRhcmdldCBtZW1pbGlraSBuaWxhaSB5YW5nIHNhbWEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIFRhdXRhbiBUYWsgYmVyYXJhaC4gSmlrYSBuaWxhaW55YSBiZXJiZWRhLCBtYWthIGhhc2lsbnlhIGFkYWxhaCB0YXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gdGlwZSB0YXV0YW4gXCdDb25uZWN0ZWRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHRhcmdldCBtZW1pbGlraSBuaWxhaSB5YW5nIHNhbWEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIFRhdXRhbiBUYWsgYmVyYXJhaC4gSmlrYSBuaWxhaW55YSBiZXJiZWRhLCBtYWthIGhhc2lsbnlhIGFkYWxhaCB0YXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIHRpcGUgdGF1dGFuIFwnRGVwZW5kc09uXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgdGFyZ2V0IG1lbWlsaWtpIG5pbGFpIHlhbmcgc2FtYSwgbWFrYSBoYXNpbG55YSBhZGFsYWggVGF1dGFuIFRhayBiZXJhcmFoLiBKaWthIG5pbGFpbnlhIGJlcmJlZGEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIHRhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiB0aXBlIHRhdXRhbiBcJ0luY2x1ZGVzXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgdGFyZ2V0IG1lbWlsaWtpIG5pbGFpIHlhbmcgc2FtYSwgbWFrYSBoYXNpbG55YSBhZGFsYWggVGF1dGFuIFRhayBiZXJhcmFoLiBKaWthIG5pbGFpbnlhIGJlcmJlZGEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIHRhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIHRpcGUgdGF1dGFuIFwnUmVsZXZhbnRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHRhcmdldCBtZW1pbGlraSBuaWxhaSB5YW5nIHNhbWEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIFRhdXRhbiBUYWsgYmVyYXJhaC4gSmlrYSBuaWxhaW55YSBiZXJiZWRhLCBtYWthIGhhc2lsbnlhIGFkYWxhaCB0YXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGViYXIgZGFyaSB0ZXh0YXJlYXMgSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aXRfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdVcmdlbnphIOKGlCBJbXBhdHRvIOKGlCBQcmlvcml0w6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ0dlc3Rpc2NlIGlsIHJpc3VsdGF0byBkaSBwcmlvcml0w6AgZGVsbGEgY29tYmluYXppb25lIENyaXRpY2l0w6Ag4oaUIEltcGF0dG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBc3NlZ25hemlvbmUgcHJpb3JpdGFyaWEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUZW1wbyBtaW5pbW8gdHJhIGluY2lkZW50aSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ1VyZ2VuemEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF6aW9uaSBzdWxsZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnVWx0aW1hIG1vZGlmaWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1VsdGltYSBtb2RpZmljYSBlZmZldHR1YXRhIGRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aXppIGFzc29jaWF0aSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hemlvbmkgc3VsIHNlcnZpemlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdTdGF0byBhdHR1YWxlIGRlbGxcJ2luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEEgYXNzb2NpYXRpJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYXR0byc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnU3RhdG8gYXR0dWFsZSBkZWxsXCdJbmNpZGVudGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnU3RhdG8gZGVsbFwnaW5jaWRlbnRlJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2Vydml6aW8gdXRlbnRlIGZpbmFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdJbnRlcmZhY2NpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ01vdG9yZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIE9wZXJhdGlvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEaW1vc3RyYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbHRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGkgcmlzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRpIHJpcHJpc3Rpbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVmVsb2NpdMOgIGRpIHJpc29sdXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYXppb25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0Vycm9yaSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnRW50cmFtYmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29ubmVzc28gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1ZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXN0aW9uZSBkZWxsYSBtYXRyaWNlIGRlbGxlIHByaW9yaXTDoC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsbyBwZXIgbW9zdHJhcmUgaWwgY29sbGVnYW1lbnRvIGluZGlldHJvIG5lbCBtZW51IHNsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bG8gcGVyIG1vc3RyYXJlIGlsIGNvbGxlZ2FtZW50byBpbmRpZXRybyBuZWwgbWVudSBkaSBzZXJ2aXppby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bG8gcGVyIG1vc3RyYXJlIGlsIGNvbGxlZ2FtZW50byBjb2xsZWdhIG5lbCBtZW51IGRpIHNlcnZpemlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsbyBwZXIgbW9zdHJhcmUgaWwgY29sbGVnYW1lbnRvIHN0YW1wYSBuZWwgbWVudSBzbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsbyBwZXIgbW9zdHJhcmUgaWwgY29sbGVnYW1lbnRvIHN0YW1wYSBuZWwgbWVudSBkaSBzZXJ2aXppby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRyaSBwZXIgZ2xpIHN0YXRpIGRlbGxcJ2luY2lkZW50ZSBuZWxsYSB2aXN0YSBkZWxsZSBwcmVmZXJlbnplLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSaWxldmFudGUgcGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JpY2hpZXN0byBwZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnRGVzY3JpemlvbmUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdEZXNjcml6aW9uZSBkZWwgc2Vydml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdTZXJ2aXppby1BcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBzdGFiaWxpc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNoYW5nZVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIHN0YWJpbGlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgc3RhYmlsaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Db25maWdJdGVtXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnRkFRXCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnUGFkcmVGaWdsaW9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdTZXJ2aXppb1wnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0FsdGVybmF0aXZvQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Db25maWdJdGVtXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnU2Vydml6aW9cJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEaXBlbmRlRGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdTZXJ2aXppb1wnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0FsdGVybmF0aXZvQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdUaWNrZXRcJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEaXBlbmRlRGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdTZXJ2aXppb1wnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdTZXJ2aXppb1wnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGFyZ2hlenphIGRlaSBjYW1waSBkaSB0ZXN0byBkaSBJVFNNJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6amFfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfph43opoHluqbihpTlvbHpn7/luqbihpTlhKrlhYjluqYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ+mHjeimgeW6puKGlOW9semfv+OCkue1hOOBv+WQiOOCj+OBm+OBn+WEquWFiOW6puOBrue1kOaenOOCkueuoeeQhuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5YSq5YWI6aCG5L2N44Gu5Ymy44KK5b2T44GmJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn44Kk44Oz44K344OH44Oz44OI6ZaT44Gu5pyA5bCP5pmC6ZaTJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn6YeN6KaB5bqmJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEHmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5pyA57WC5aSJ5pu05pmC5Yi7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+acgOe1guWkieabtOiAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn6Zai6YCj44GZ44KL44K144O844OT44K5JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+OCteODvOODk+OCueaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn44Kk44Oz44K344OH44Oz44OI44Gu54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+mWoumAo+OBmeOCi1NMQSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9semfvyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJ1NMQUlE44GM5LiO44GI44KJ44KM44Gm44GE44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdTTEFJRCAlcyDjga/jg4fjg7zjgr/jg5njg7zjgrnjgavjgYLjgorjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJ+OCq+ODrOODs+ODgOODvOODu+ODh+ODleOCqeODq+ODiCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnU2VydmljZUlE44Gv5oyH5a6a44GV44KM44Gm44GE44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzIOOBr+ODh+ODvOOCv+ODmeODvOOCueOBq+OBguOCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn44Kk44Oz44K344OH44Oz44OI44Gu54q25oWLJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOOBrueKtuaFiyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfpgJrluLjpgYvnlKgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+OCqOODs+ODieODpuODvOOCtuODu+OCteODvOODk+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfjg5Xjg63jg7Pjg4jjgqjjg7Pjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICfjg5Djg4Pjgq/jgqjjg7Pjg4knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lU44Oe44ON44O844K444Oh44Oz44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+ODrOODneODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU44Kq44Oa44Os44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfjg4fjg6Ljg7Pjgrnjg4jjg6zjg7zjgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfmlK/mjIHjgZnjgovlpZHntIQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfjgZ3jga7ku5YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn5Y+v55So5oCnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfjg6zjgrnjg53jg7Pjgrnjgr/jgqTjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+ODquOCq+ODkOODquODu+OCv+OCpOODoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfop6Plg4/luqbjg6zjg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn5Y+W5byVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+OCqOODqeODvCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5Luj5pu/77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICfkuKHmlrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn5o6l57aa77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jgqrjg5bjgrjjgqfjgq/jg4jjgqbjgqPjgrjjgqfjg4Pjg4jvvIhMaW5rT2JqZWN0IDo6IFZpZXdNb2RlID0gImNvbXBsZXgi77yJ44Gn6Kit5a6a44Oc44K/44Oz44KS5L2/55So44Gn44GN44KL44Ki44Kv44K344On44Oz44KS5a6a576p44GX44G+44GZ44CCIOOBk+OCjOOCieOBruOCouOCr+OCt+ODp+ODs+OBr+OAgeasoeOBrkpT44GK44KI44GzQ1NT44OV44Kh44Kk44Or44KS55m76Yyy44GX44Gm44GE44KL5b+F6KaB44GM44GC44KK44G+44GZ44CCQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3PjgIFDb3JlLlVJLkFsbG9jYXRpb25MaXN0Lmpz44CBQ29yZS5VSS5UYWJsZS5Tb3J0Lmpz44CBQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanPjgIHlj4rjgbNDb3JlLkFnZW50IC5MaW5rT2JqZWN0LmpzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jgZXjgozjgZ/jgrXjg7zjg5PjgrnjgqbjgqPjgrjjgqfjg4Pjg4jjgavooajnpLrjgZXjgozjgovliJfjgpLlrprnvqnjgZfjgb7jgZnvvIhMaW5rT2JqZWN0IDo6IFZpZXdNb2RlID0gImNvbXBsZXgi77yJ44CCIOazqO+8mkRlZmF1bHRDb2x1bW5z44Gr44Gv44K144O844OT44K55bGe5oCn44Gu44G/44GM6Kix5Y+v44GV44KM44Gm44GE44G+44GZ44CCIOWPr+iDveOBquioreWumu+8mjAgPeS9v+eUqOS4jeWPr+OAgTEgPeS9v+eUqOWPr+iDveOAgTIgPeODh+ODleOCqeODq+ODiOOBp+S9v+eUqOWPr+iDveOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn5L6d5a2Y77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn566h55CG44Ko44Oq44Ki44Gn44GuQWRtaW5JVFNNQ0lQQWxsb2NhdGXjga7jg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNMQeOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TTEFQcmludOOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNMQVpvb23jgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TZXJ2aWNl44Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TZXJ2aWNlUHJpbnTjgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU2VydmljZVpvb23jgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnSVRTTSBTTEEg44Gu5qaC6KaBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNNIOOCteODvOODk+OCueOBruamguimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAn44Kk44Oz44K344OH44Oz44OI54q25oWL44Gu44K/44Kk44OXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAn44Kk44Oz44K344OH44Oz44OI54q25oWL44Gu44K/44Kk44OXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn5ZCr44KA77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAn5YSq5YWI5bqm44Gu6Zai6YCj5oCn44KS566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdTTEHjg6Hjg4vjg6Xjg7zjgavmiLvjgovjg6Hjg4vjg6Xjg7zpoIXnm67jgpLooajnpLrjgZnjgovjg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfjgrXjg7zjg5Pjgrnjg6Hjg4vjg6Xjg7zjgavmiLvjgovjg6Hjg4vjg6Xjg7zpoIXnm67jgpLooajnpLrjgZnjgovjg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfjgrXjg7zjg5Pjgrnjg6Hjg4vjg6Xjg7zjgavjg6rjg7Pjgq/jg6Hjg4vjg6Xjg7zpoIXnm67jgpLooajnpLrjgZnjgovjg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdTTEHjg6Hjg4vjg6Xjg7zjgavljbDliLfjg6Hjg4vjg6Xjg7zpoIXnm67jgpLooajnpLrjgZnjgovjg6Ljgrjjg6Xjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn44K144O844OT44K544Oh44OL44Ol44O844Gr5Y2w5Yi344Oh44OL44Ol44O86aCF55uu44KS6KGo56S644GZ44KL44Oi44K444Ol44O844OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfoqK3lrprjg5Pjg6Xjg7zjgafjga7jgqTjg7Pjgrfjg4fjg7Pjg4jjgrnjg4bjg7zjgr/jgrnjga7jg5Hjg6njg6Hjg7zjgr/jg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ+S4gOmDqO+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+mWoumAo+mgheebru+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICflv4XpoIjvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xB44Gu5qaC6KazJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdTTEEg44Gu5Y2w5Yi3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ1NMQSDjgrrjg7zjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ+OCteODvOODk+OCueOBruamguimsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ+OCteODvOODk+OCueOBruWNsOWItyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAn44K144O844OT44K544O744K644O844OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+OCteODvOODk+OCueODu+OCqOODquOCoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICfjgqTjg7Pjgrfjg4fjg7Pjg4jnirbmhYvjga7oqIjnrpfjgavkvb/nlKjjgZnjgovjg6rjg7Pjgq/jga7jgr/jgqTjg5fjgajmlrnlkJHjgpLoqK3lrprjgZfjgb7jgZnjgIIg44Kt44O844Gv44Oq44Oz44Kv44K/44Kk44OX44Gu5ZCN5YmN77yITGlua09iamVjdCA6OiBUeXBl44Gn5a6a576p44GV44KM44Gm44GE44KL77yJ44Gn44GC44KK44CB5YCk44Gv44Kk44Oz44K344OH44Oz44OI44K544OG44O844K/44K544KS6KiI566X44GZ44KL44Gf44KB44Gr5b6T44GG44G544GNSW5jaWRlbnRMaW5rVHlwZeOBruaWueWQkeOBp+OBmeOAgiDjgZ/jgajjgYjjgbDjgIFJbmNpZGVudExpbmtUeXBl44GMIFwnRGVwZW5kc09uXCfjgavoqK3lrprjgZXjgozjgabjgYrjgorjgIFEaXJlY3Rpb27jgYwgXCdTb3VyY2VcJ+OBruWgtOWQiOOAgeOCpOODs+OCt+ODh+ODs+ODiOOBruOCueODhuODvOOCv+OCueOCkuioiOeul+OBmeOCi+OBn+OCgeOBq+OAgSBcJ+S+neWtmOOBmeOCi1wn44Oq44Oz44Kv44Gu44G/44GM6KGo56S644GV44KM44G+44GZ77yI5Y+N5a++44Gu44Oq44Oz44Kv44GvIFwnUmVxdWlyZWQgZm9yXCfjgafjga/jgYLjgorjgb7jgZvjgpPvvInjgIIg5bqD5ZGK44K/44Kk44OX44Gu44Oq44Oz44Kv44K/44Kk44OX44KS6L+95Yqg44Gn44GN44G+44GZ77yI5L6L77yaIOaWueWQkSBcJ1RhcmdldFwn44KS5ZCr44KAIFwnSW5jbHVkZXNcJ+OAgiBzeXNjb25maWfjgqrjg5fjgrfjg6fjg7NMaW5rT2JqZWN0IDo6IFR5cGXjgaflrprnvqnjgZXjgozjgabjgYTjgovjgZnjgbnjgabjga7jg6rjg7Pjgq/jgr/jgqTjg5fjgYzlj6/og73jgafjgIHmlrnlkJHjga8gXCdTb3VyY2VcJ+OAgSBcJ1RhcmdldFwn44CB44G+44Gf44GvIFwnQm90aFwn44Gn44GZ44CCIOmHjeimge+8muOBk+OBrlNZU0NPTkZJR+OCquODl+OCt+ODp+ODs+OBq+WkieabtOOCkuWKoOOBiOOBn+OCieOAgeOCs+ODs+OCveODvOODq+OCs+ODnuODs+ODiWJpbi9vdHJzLkNvbnNvbGUucGzjgpLlrp/ooYzjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgIJBZG1pbiA6OiBJVFNNIDo6IEluY2lkZW50U3RhdGUgOjogUmVjYWxjdWxhdGXjgZfjgZ/jgYzjgaPjgabjgIHjgZnjgbnjgabjga7kuovmhYvjga/mlrDjgZfjgYToqK3lrprjgavln7rjgaXjgYTjgablho3oqIjnrpfjgZXjgozjgb7jgZnvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmE5vcm1hbOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzku5bjga7igJhUaWNrZXTigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfigJhOb3JtYWzigJnjg6rjg7Pjgq/jg7vjgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHigJhJVFNNQ2hhbmdl4oCZ44Kq44OW44K444Kn44Kv44OI44GM4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfigJjopqrlrZDigJnjg6rjg7Pjgq/jg7vjgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHigJhJVFNNQ2hhbmdl4oCZ44Kq44OW44K444Kn44Kv44OI44GM4oCYRkFR4oCZ44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44GV44KM44KL44KI44GG44Gr44CB5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmOmWoumAo+OBl+OBn+KAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMQWx0ZXJuYXRpdmVUby9+44Gu5Luj5pu/44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44K144O844OT44K544CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMRGVwZW5kc09uL37jgavkvp3lrZjjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjgrXjg7zjg5PjgrnjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44K144O844OT44K544CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMQWx0ZXJuYXRpdmVUby9+44Gu5Luj5pu/44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44OB44Kx44OD44OI44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjOODgeOCseODg+ODiOOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjFJlbGV2YW50VG8vfuOBqOmWoumAo+OBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjOODgeOCseODg+ODiOOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMQWx0ZXJuYXRpdmVUby9+44Gu5Luj5pu/44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB5LuW44Gu44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxDb25uZWN0ZWRUby9+44Go44Gk44Gq44GM44Gj44Gm44GE44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB5LuW44Gu44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMRGVwZW5kc09uL37jgavkvp3lrZjjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjEluY2x1ZGVzL37jgpLlkKvjgoDjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB5LuW44Gu44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjERlcGVuZHNPbi9+44Gr5L6d5a2Y44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjE5vcm1hbC/pgJrluLjjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Xb3JrT3JkZXLjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNV29ya09yZGVy44CN44Kq44OW44K444Kn44Kv44OI44GM44CMTm9ybWFsL+mAmuW4uOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Xb3JrT3JkZXLjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxOb3JtYWwv6YCa5bi444CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMVGlja2V044CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxTZXJ2aWNl44CN44Kq44OW44K444Kn44Kv44OI44GM44CMTm9ybWFsL+mAmuW4uOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjEZBUeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxTZXJ2aWNl44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUGFyZW50Q2hpbGQv6Kaq5a2Q44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMRkFR44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMU2VydmljZeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjFJlbGV2YW50VG8vfuOBqOmWoumAo+OBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjEZBUeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0FsdGVybmF0aXZlVG9cJ+OBruWumue+qeOBp+OBmeOAguOCguOBl+OCveODvOOCueWQjeOBiuOCiOOBs+OCv+ODvOOCsuODg+ODiOWQjeOBjOWQjOOBmOWApOOCkuWQq+OCk+OBp+OBhOOCi+WgtOWQiOOAgee1kOaenOOBruODquODs+OCr+OBr+mdnuebtOaOpeODquODs+OCr+OBq+OBquOCiuOAgeOBneOBhuOBp+OBquOBhOe1kOaenOOBr+ebtOaOpeODquODs+OCr+OBq+OBquOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdDb25uZWN0ZWRUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdEZXBlbmRzT25cJ+OBruWumue+qeOBp+OBmeOAguOCguOBl+OCveODvOOCueWQjeOBiuOCiOOBs+OCv+ODvOOCsuODg+ODiOWQjeOBjOWQjOOBmOWApOOCkuWQq+OCk+OBp+OBhOOCi+WgtOWQiOOAgee1kOaenOOBruODquODs+OCr+OBr+mdnuebtOaOpeODquODs+OCr+OBq+OBquOCiuOAgeOBneOBhuOBp+OBquOBhOe1kOaenOOBr+ebtOaOpeODquODs+OCr+OBq+OBquOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn44Oq44Oz44Kv44O744K/44Kk44OXXCdJbmNsdWRlc1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+ODquODs+OCr+ODu+OCv+OCpOODl1wnUmVsZXZhbnRUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0lUU00g44OG44Kt44K544OI44Ko44Oq44Ki5bmFJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bXNfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0aWthbCDihpQgS2VzYW4g4oaUIEtldXRhbWFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnTWVuZ3VydXNrYW4gaGFzaWwga2V1dGFtYWFuIGtyaXRpa2FsIGdhYnVuZ2FuIOKGlCBLZXNhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0JlcmlrYW4ga2V1dGFtYWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWFzYSBtaW5pbWEgYW50YXJhIGluY2lkZW50JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQS1JbmZvcm1hc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnS2FsaSB0ZXJha2hpciBkaXViYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnS2FsaSB0ZXJha2hpciBkaXViYWggc2VtYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQZXJraGlkbWF0YW4gQmVyc2VrdXR1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzaSBTZXJ2aXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0tlamFkaWFuIGtlYWRhYW4gc2VtYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSBCZXJzZWt1dHUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdLZXNhbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSW5zaWRlbiBzdGF0dXMgc2VtYXNhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ2luc2lkZW4ga2VhZGFhbic7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdvcGVyYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnaW5zaWRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnUGVuZ2d1bmEgQWtoaXIgU2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnUGVuZ3VydXNhbiBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdNZWxhcG9ya2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFzaSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb3N0cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ1NlbGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdWZXJmw7xnYmFya2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnTWFzYSBUaW5kYWsgYmFsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ01hc2EgU2VtYnVoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAna2FkYXIgUmVzb2x1c2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0tlc2lsYXBhbic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ0tlZHVhLWR1YW55YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdEaWh1bmdrYW4ga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdUYWtyaWZrYW4gVGluZGFrYW4gZGltYW5hIGJ1dGFuZyB0ZXRhcGFuIGl0dSBhZGEgZGFsYW0gd2lkZ2V0IG9iamVrIGJlcnNhbWJ1bmcgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gU2lsYSBwYXN0aWthbiB5YW5nIFRpbmRha2FuIGluaSBwZXJsdSBkaWRhZnRhcmthbiB5YW5nIGJlcmlrdXQgZmFpbC1mYWlsIEpTIGRhbiBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdUYWtyaWZrYW4gbGFqdXItbGFqdXIgeWFuZyBtYW5hIGRpdHVuanVra2FuIGRhbGFtIHdpZGdldCBwZXJraGlkbWF0YW4gYmVyc2FtYnVuZyAoT2JqZWtTYW1idW5nYW46Ok1vZFBlbWFuZGFuZ2FuOjogImtvbXBsZWtzIikuIE5vdGE6IEhhbnlhIHNpZmF0LXNpZmF0IHBlcmtoaWRtYXRhbiB5YW5nIGRpYmVuYXJrYW4gdW50dWsgTGFqdXJMYWxhaS4gVGV0YXBhbiBNdXN0YWhpbDogMCA9IFRpZGFrIERpYm9sZWhrYW4sIDEgPSBBZGEsIDIgPSBEaWJvbGVoa2FuIGRlbmdhbiBsYWxhaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0JlcmdhbnR1bmcga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsga29uZmlndXJhc2kgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZGkga2F3YXNhbiBhZG1pbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIGJhZ2kgb2JqZWsgQWdlbnRJVFNNU0xBIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNMQVByaW50IGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU0xBWm9vbSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIGJhZ2kgb2JqZWsgQWdlbnRJVFNNU2VydmljZSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZVByaW50IGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNlcnZpY2Vab29tIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ3RpbmphdWFuIGtlc2VsdXJ1aGFuIElUU00gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdUaW5qYXVhbiBTZXJ2aXMgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnSmVuaXMgS2VhZGFhbiBLZWphZGlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ0plbmlzIEtlYWRhYW4gS2VqYWRpYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnVGVybWFzdWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdNZW5ndXJ1cyBtYXRyaWtzIGtldXRhbWFhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIGtlbWJhbGkgcGF1dGFuIGRhbGFtIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIGtlbWJhbGkgcGF1dGFuIGRhbGFtIG1lbnUgcGVya2hpZG1hdGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIHBhdXRhbiBwYXV0YW4gZGFsYW0gbWVudSBwZXJraGlkbWF0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIGNldGFrIGRhbGFtIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBwYXV0YW4gY2V0YWsgZGFsYW0gbWVudSBwZXJraGlkbWF0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0ZXIgdW50dWsga2VhZGFhbiBpbnNpZGVuIG1lbWFuZGFuZ2thbiBrZXV0YW1hYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdTZWJhaGFnaWFuIGRhcmlwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnQmVya2FpdGFuIGtlcGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdEaXBlcmx1a2FuIHVudHVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ0xpaGF0IHNlbXVsYSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ0NldGFrYW4gU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdadW0gU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnTGloYXQgc2VtdWxhIHNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ0NldGFrYW4gU2VydmlzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnWnVtIFNlcnZpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnS2F3YXNhbi1TZXJ2aXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnVWJhaCBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0IFwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnSWJ1IEJhcGEgQW5hayBBbmFrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0FsdGVybmF0aXZlVG9cJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXRcJyBvYmplayBtZW5nZ3VuYWthbiBcJ0FsdGVybmF0aWYgVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldCBcJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldFwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBsYWluIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0FsdGVybmF0aXZlVG9cJyBwYXV0YW4gamVuaXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4gXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVrIG1lbmdndW5ha2FuIFwnQ29ubmVjdGVkVG9cJyBwYXV0YW4gamVuaXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBsYWluIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4tbGFpbiBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdUZXJtYXN1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnSVRTTSBDb25maWdJdGVtXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBvYmplayBcJ0NvbmZpZ0l0ZW0gSVRTTVwnbGFpbiB5YW5nIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIHlhbmcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnQ29uZmlnSXRlbSBJVFNNXCdvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuIFwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsIFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldFwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBvYmplayBcJ1BlcmtoaWRtYXRhbiBcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2Egb2JqZWsgXCdQZXJraGlkbWF0YW4gXCcgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnSWJ1IEJhcGEgS2FuYWsta2FuYWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBvYmplayBcJ1BlcmtoaWRtYXRhbiBcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnQWx0ZXJuYXRpdmVUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdDb25uZWN0ZWRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnQmVyZ2FudHVuZyBQYWRhXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGplbmlzIHBhdXRhbiBcJ1Rlcm1hc3VrXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnUmVsZXZhbnRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGViYXIga2F3YXNhbiB0ZWtzIElUU00uJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcml0aWthbGl0ZXQg4oaUIE9tZmFuZyDihpQgUHJpb3JpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdBZG1pbmlzdHJlciBwcmlvcml0ZXRzcmVzdWx0YXQgdmVkIMOlIGtvbWJpbmVyZSBLcml0aWthbGl0ZXQg4oaUIE9tZmFuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnVGlsZGVsaW5nIGF2IHByaW9yaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltdW1zdGlkIG1lbGxvbSBIZW5kZWxzZXInOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzam9uIG9tIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdTaXN0IGVuZHJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTaXN0IGVuZHJldCBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnVGlsa255dHRlZGUgdGplbmVzdGVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzam9uIG9tIFRqZW5lc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdUaWxzdGFuZCBww6UgbsOldsOmcmVuZGUgaGVuZGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnVGlsa255dHRlZGUgU0xBZXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdPbWZhbmcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1RpbHN0YW5kIHDDpSBuw6V2w6ZyZW5kZSBoZW5kZWxzZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdIZW5kZWxzZXN0aWxzdGFuZCc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0hlbmRlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTbHV0dGJydWtlci10amVuZXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lULWxlZGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQtZHJpZnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3NqZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVybGlnZ2VuZGUga29udHJha3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdUaWxnamVuZ2VsaWdoZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1Jlc3BvbnN0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ0dqZW5vcHByZXRuaW5nc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdPcHByZXR0aW5nc3JhdGlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtzam9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRmVpbCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ0JlZ2dlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0tvYmxldCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBdmhlbmdlciBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3Iga29uZmlndXJhc2pvbiBhdiBBZG1pbklUU01DSVBBbGxvY2F0ZSBpIGFkbWluLW9tcsOlZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TTEEtb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU0xBUHJpbnQtb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TTEFab29tLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU2VydmljZS1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU2VydmljZVByaW50LW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNlcnZpY2Vab29tLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdTTEEtb3ZlcnNpa3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ0lUU00tVGplbmVzdGVvdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVHlwZSBoZW5kZWxzZXN0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ1R5cGUgaGVuZGVsc2VzdGlsc3RhbmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5rbHVkZXJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0FkbWluaXN0csOpciBwcmlvcml0ZXRzbWF0cmlzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHRpbGJha2UtbGVua2VuIGkgU0xBLW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHNvbSB2aXNlciB0aWxiYWtlLWxlbmtlbiBpIHRqZW5lc3RlbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIGxlbmtlLWxlbmtlbiBpIHRqZW5lc3RlLW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsIHNvbSB2aXNlciBza3Jpdi11dC1sZW5rZW4gaSBTTEEtbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHNvbSB2aXNlciBza3Jpdi11dC1sZW5rZW4gaSB0amVuZXN0ZW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldHJlIGZvciBoZW5kZWxzZXN0aWxzdGFuZGVyIGkgdmFsZ3Zpc25pbmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGF2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1DDpWtyZXZkIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtb3ZlcnNpa3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQS11dHNrcmlmdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEEtZGV0YWxqZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdUamVuZXN0ZS1vdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ1RqZW5lc3RldXRza3JpZnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1RqZW5lc3RlZGV0YWxqZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnVGplbmVzdGVvbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0JyZWRkZSBww6UgSVRTTSBzaW5lIHRla3N0b21yw6VkZXIuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmxfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdVcmdlbnRpZSDihpQgSW1wYWN0IOKGlCBQcmlvcml0ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXRlaXQgdG9la2VubmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXRpamQgdHVzc2VuIGluY2lkZW50ZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbnRpZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBIEluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTGFhdHN0IGFhbmdlcGFzdCBvcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdMYWF0c3QgYWFuZ2VwYXN0IGRvb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ0JpamJlaG9yZW5kZSBTZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdTZXJ2aWNlIEluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0h1aWRpZ2UgaW5jaWRlbnQtc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ0JpamJlaG9yZW5kZSBTTEFzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdIdWlkaWdlIGluY2lkZW50IHN0YXR1cyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVudCBzdGF0dXMnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aW9uZWVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0VpbmRnZWJydWlrZXIgc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwcG9ydGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIE9wZXJhdGlvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2plY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3ZlcmlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Jlc2NoaWtiYWFyaGVpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnUmVzcG9uc2lldGlqZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnSGVyc3RlbHRpamQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnT3Bsb3N0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWN0aWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZvdXRlbic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZWYgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1ZlcmJvbmRlbiBtZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBZmhhbmtlbGlqayB2YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0JldmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQmVoZWVyIHByaW9yaXRlaXRlbi1tYXRyaXgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnT25kZXJkZWVsIHZhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1ZhbiBiZWxhbmcgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdCZW5vZGlnZCB2b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQS1vdmVyemljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1NlcnZpY2Utb3ZlcnppY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZS1BcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdLcnl0eWN6bm/Fm8SHIOKGlCBXcMWCeXcg4oaUIFByaW9yeXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnWmFyesSFZHphbmllIHdhcnRvxZtjacSFIHByaW9yeXRldHUgZGxhIGtvbWJpbmFjamkgS3J5dHljem5vxZvEhyDihpQgV3DFgnl3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQWxva2FjamEgcHJpb3J5dGV0dSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltYWxueSBjemFzIG1pxJlkenkgemRhcnplbmlhbWknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcnl0eWN6bm/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2plIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdPc3RhdG5pYSB6bWlhbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnT3N0YXRuaW8gem1pZW5pb25lIHByemV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQb8WCxIVjem9uZSB1c8WCdWdpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgbyB1c8WCdWR6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWFsbnkgc3RhbiBpbmN5ZGVudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnUG/FgsSFY3pvbmUgU0xBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnV3DFgnl3JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdBa3R1YWxueSBzdGFuIGluY3lkZW50dSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGFuIHpkYXJ6ZW5pYSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWN5am55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnWmRhcnplbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdVc8WCdWdhIFXFvHl0a293bmlrYSBLb8WEY293ZWdvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnWmFwbGVjemUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIHphcnrEhWR6YW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBvcnRvd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBvcGVyYWN5am5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmFjamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnUG9kc3Rhd3kgVW1vd3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdJbm5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3TEmXBub8WbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ0N6YXMgb2Rwb3dpZWR6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnQ3phcyBvZHp5c2thbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0N6YXMgcm96d2nEhXphbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnQsWCxJlkeSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXR5d2EgZGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnUG/FgsSFY3pvbmUgeic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1phbGXFvG5lIG9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdaYXdpZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnWmFyesSFZHphaiBtYWNpZXJ6xIUgcHJpb3J5dGV0w7N3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IHBvd3JvdHUgdyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgcG93cm90dSB3IG1lbnUgc2Vyd2lzb3d5bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgdyBtZW51IHNlcndpc293eW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IGRydWtvd2FuaWEgdyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IGRydWtvd2FuaWEgdyBtZW51IHNlcndpc293eW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0cnkgZGxhIHN0YW7Ds3cgemRhcnplxYQgdyB3aWRva3UgcHJlZmVyZW5jamkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdDesSZxZvEhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ09kcG93aWVkbmllIGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1BvdHJ6ZWJuZSBkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdQcnplZ2zEhWQgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdQcnplZ2zEhWQgdXPFgnVnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VrY2phIHNlcndpc293YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+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+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdTemVyb2tvxZvEhyBvYnN6YXLDs3cgdGVrc3Rvd3ljaCBJVFNNLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQlJfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdDcml0aWNhbGlkYWRlIOKGlCBJbXBhY3RvIOKGlCBQcmlvcmlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdHZXJlbmNpYXIgYSBwcmlvcmlkYWRlIHJlc3VsdGFudGUgZGEgY29tYmluYcOnw6NvIENyaXRpY2FsaWRhZGUg4oaUIEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBdHJpYnVpw6fDo28gZGUgcHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIE3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2FsaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBhbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmnDp29zIEFzc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRlIHNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwgZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNzb2NpYWRvcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmnDp28gYSBVc3XDoXJpbyBGaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udCBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrIEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnR2VyZW5jaWFtZW50byBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZWxhdMOzcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmHDp8O1ZXMgZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGNvbSBUZXJjZWlyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdXRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRlIFJlc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUZW1wbyBkZSBSZWN1cGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1RheGEgZGUgUmVzb2x1w6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0Vycm9zJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2YSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICdBbWJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5hIEHDp8O1ZXMgb25kZSB1bSBib3TDo28gZGUgY29uZmlndXJhw6fDtWVzIGVzdMOhIGRpc3BvbsOtdmVsIG5vIHdpZGdldCBkZSBvYmpldG9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlPSJjb21wbGV4IikuIE9ic2VydmUgcXVlIGVzc2FzIGHDp8O1ZXMgZGV2ZW0gdGVyIHJlZ2lzdHJhZG8gb3Mgc2VndWludGVzIGFycXVpdm9zIEpTIGUgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBlIENvcmUuQWdlbnQgLkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmEgcXVhaXMgY29sdW5hcyBzw6NvIG1vc3RyYWRhcyBubyB3aWRnZXQgZGUgc2VydmnDp29zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlPSJjb21wbGV4IikuIE9ic2VydmHDp8Ojbzogc29tZW50ZSBhdHJpYnV0b3MgZGUgc2VydmnDp28gc8OjbyBwZXJtaXRpZG9zIHBhcmEgRGVmYXVsdENvbHVtbnMuIERlZmluacOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYXRpdmFkbywgMSA9IERpc3BvbsOtdmVsLCAyID0gQWN0aXZhZG8gcG9yIHBhZHLDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluSVRTTUNJUEFsbG9jYXRlIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEEgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFQcmludCBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBWm9vbSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlUHJpbnQgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgZGUgU0xBIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgZGUgU2VydmnDp28gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEluY2lkZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXJlbmNpYXIgbWF0cml6IGRlIHByaW9yaWRhZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgdm9sdGFyIG5vIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayB2b2x0YXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgYXNzb2NpYXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgaW1wcmltaXIgbm8gbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBpbXByaW1pciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6JtZXRyb3MgcGFyYSBvcyBlc3RhZG9zIGRlIGluY2lkZW50ZSBuYSB2aXPDo28gZGUgcHJlZmVyw6puY2lhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRlIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzaXRhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ0ltcHJpbWlyIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnRGV0YWxoZXMgZG8gU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnVmlzw6NvIEdlcmFsIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnaW1wcmltaXIgU2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICdEZXRhbGhlIGRvIFNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfDgXJlYSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdNdWRhbsOnYUlUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdQYWlGaWxob1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnQ29uZWN0YWRvIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0luY2x1aVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0FsdGVybmF0aXZhIGFcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdDb25lY3RhZG8gYVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdEZXBlbmRlIGRlXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnSW5jbHVpXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdSZWxldmFudGUgYVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ07Dum1lcm8gZGUgY2FyYWN0ZXJlcyBwb3IgbGluaGEgZW0gw6FyZWFzIGRlIHRleHRvIElUU00uJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdDcml0aWNpZGFkZSDihpQgSW1wYWN0byDihpQgUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnR2VyaXIgYSBQcmlvcmlkYWRlIHJlc3VsdGFudGUgZGEgY29tYmluYcOnw6NvIENyaXRpY2lkYWRlIOKGlCBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXRyaWJ1acOnw6NvIGRlIFByaW9yaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUZW1wbyBNw61uaW1vIGVudHJlIEluY2lkZW50ZXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdDcml0aWNpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgYWx0ZXJhw6fDo28gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2acOnb3MgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgc2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBBc3NvY2lhZG9zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0byc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW5jaWRlbnRlJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmnDp28gYSB1dGlsaXphZG9yIGZpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYcOnw7VlcyBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdG8gY29tIFRlcmNlaXJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRlIFJlY3VwZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGF4YSBkZSBSZXNvbHXDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2HDp8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3MnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXZhIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ0FtYm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpZ2FkbyBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdEZWZpbmlyIEFjw6fDtWVzIG9uZGUgdW0gYm90w6NvIGRlIGNvbmZpZ3VyYcOnw7VlcyBlc3TDoSBkaXNwb27DrXZlbCBuYSB3aWRnZXQgdGhlIG9iamVjdG9zIGxpZ2Fkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gIEVzdGFzIEFjw6fDtWVzIGRldmVtIGVzdGFyIHJlZ2lzdGFkYXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgSlMgZSBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmlyIHF1ZSBjb2x1bmFzIHPDo28gYXByZXNlbnRhZGFzIG5vcyB3aWRnZXQgZGUgU2VydmnDp29zIGxpZ2Fkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90YTogQXBlbmFzIGF0cmlidXRlcyBkZSBTZXJ2acOnbyBzw6NvIHBlcm1pdGlkb3MgbmFzIERlZmF1bHRDb2x1bW5zLiBDb25maWd1cmHDp8O1ZXMgUG9zc8OtdmVpczogMCA9IERlc2FjdGl2YWRvLCAxID0gQWN0aXZhZG8sIDIgPSBBY3RpdmFkbyBwb3Igb21pc3PDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIGEgY29uZmlndXJhw6fDo28gQWRtaW5JVFNNQ0lQQWxsb2NhdGUgbmEgw6FyZWEgZGUgZ2VzdMOjby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEEgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFQcmludCBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBWm9vbSBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlUHJpbnQgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnVmlzw6NvIEdlcmFsIFNMQSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgU2VydmnDp28gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5jbHVpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VyaXIgYSBtYXRyaXogZGUgUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgdm9sdGFyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGFzc29jaWFyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgaW1wcmltaXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcsOibWV0cm9zIHBhcmEgb3MgZXN0YWRvcyBkZSBpbmNpZGVudGUgbmFzIHByZWZlcsOqbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpc2l0YWRvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdJbXByZXNzw6NvIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdEZXRhbGhlIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnVmlzw6NvIEdlcmFsIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnSW1wcmVzc8OjbyBkZSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnRGV0YWxoZSBkZSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfDgXJlYSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdNdWRhbsOnYUlUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdMaWdhZG8gYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0luY2x1aVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgcGFyYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQWx0ZXJuYXRpdmEgYVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnTGlnYWRvIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdEZXBlbmRlIGRlXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdJbmNsdWlcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnUmVsZXZhbnRlIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ07Dum1lcm8gZGUgY2FyYWN0ZXJlcyBwb3IgbGluaGEgZW0gw6FyZWFzIGRlIHRleHRvIElUU00uJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cnVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfQmtGA0LjRgtC40YfQvdC+0YHRgtGMIOKGlCDQktC70LjRj9C90LjQtSDihpQg0J/RgNC40L7RgNC40YLQtdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICfQmNC30LzQtdC90LXQvdC40LUg0YLQsNCx0LvQuNGG0Ysg0YDQsNGB0YfQtdGC0LAg0L/RgNC40L7RgNC40YLQtdGC0LAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC60L7QvNCx0LjQvdCw0YbQuNC4INCa0YDQuNGC0LjRh9C90L7RgdGC0Ywg4oaUINCS0LvQuNGP0L3QuNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn0J3QsNC30L3QsNGH0LXQvdC40LUg0L/RgNC40L7RgNC40YLQtdGC0LAnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfQnNC40L3QuNC80LDQu9GM0L3QvtC1INCy0YDQtdC80Y8g0LzQtdC20LTRgyDQuNC90YbQuNC00LXQvdGC0LDQvNC4JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YLRjCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0JTQsNGC0LAg0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9Ca0LXQvCDQuNC30LzQtdC90LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfQodCy0Y/Qt9Cw0L3QvdGL0LUg0YHQtdGA0LLQuNGB0YsnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0KHQtdGA0LLQuNGB0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9Ci0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn0KHQstGP0LfQsNC90L3Ri9C1IFNMQSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9CS0LvQuNGP0L3QuNC1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnU0xBSUQg0L3QtSDQvdCw0LfQvdCw0YfQtdC9ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU0xBSUQgJXMg0L3QtSDQvdCw0LnQtNC10L0g0LIg0LHQsNC30LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICfQmtCw0LvQtdC90LTQsNGA0Ywg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJ1NlcnZpY2VJRCDQvdC1INC90LDQt9C90LDRh9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzINC90LUg0L3QsNC50LTQtdC9INCyINCx0LDQt9C1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfQodC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ9CSINGN0LrRgdC/0LvRg9Cw0YLQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ9CY0L3RhtC40LTQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ9Ca0L7QvdC10YfQvdGL0Lkg0YHQtdGA0LLQuNGBINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfQmNC90YLQtdGA0YTQtdC50YHQvdCw0Y8g0YfQsNGB0YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ9Ch0LXRgNCy0LXRgNC90LDRjyDRh9Cw0YHRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ9Ch0L7RgdGC0LDQstC70LXQvdC40LUg0L7RgtGH0LXRgtC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICfQrdC60YHQv9C70YPQsNGC0LDRhtC40Y8g0JjQoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn0JTQtdC80L7QvdGB0YLRgNCw0YbQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfQn9C70LDQvdC40YDQvtCy0LDQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn0JrQvtC90YLRgNCw0LrRgiDQv9C+0LTQtNC10YDQttC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn0JTQvtGB0YLRg9C/0L3QvtGB0YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn0JLRgNC10LzRjyDRgNC10LDQutGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn0JLRgNC10LzRjyDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9Ce0YLQvdC+0YHQuNGC0LXQu9GM0L3QsNGPINGB0LrQvtGA0L7RgdGC0Ywg0YDQtdGI0LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn0KTQuNC90LDQvdGB0L7QstGL0LUg0L7Qv9C10YDQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfQntGI0LjQsdC60LgnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ9CX0LDQvNC10L3QsCDQtNC70Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJ9Ce0LHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfQodCy0Y/Qt9Cw0L0g0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQlNC10LnRgdGC0LLQuNGPL0FjdGlvbnMg0LrQvtCz0LTQsCDQutC90L7Qv9C60LAg0L3QsNGB0YLRgNC+0LnQutC4INC00L7RgdGC0YPQv9C90LAg0LIg0YHQstGP0LfQsNC90L3QvtC8INCy0LjQtNC20LXRgtC1IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCe0LHRgNCw0YLQuNGC0LUg0LLQvdC40LzQsNC90LjQtSwg0YfRgtC+INGN0YLQuCDQlNC10LnRgdGC0LLQuNGPL0FjdGlvbnMg0LTQvtC70LbQvdGLINC40LzQtdGC0Ywg0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC90L3Ri9C1IEpTINC40LvQuCBDU1Mg0YTQsNC50LvRizogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMg0LggQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvQuNGC0YwsINC60LDQutC40LUg0YHRgtC+0LvQsdGG0Ysg0L7RgtC+0LHRgNCw0LbQsNGO0YLRgdGPINCyINGB0LLRj9C30LDQvdC90L7QvCDQstC40LTQttC10YLQtSDRgdC70YPQttCxIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQotC+0LvRjNC60L4g0YHQtdGA0LLQuNGB0L3Ri9C1INCw0YLRgNC40LHRg9GC0Ysg0YDQsNC30YDQtdGI0LXQvdGLINC00LvRjyBEZWZhdWx0Q29sdW1ucy4g0JLQvtC30LzQvtC20L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuDogMCA9INCe0YLQutC70Y7Rh9C10L3QviwgMSA9INCS0LrQu9GO0YfQtdC90L4sIDIgPSDQktC60LvRjtGH0LXQvdC+INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC40YIg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC/0LDRgNCw0LzQtdGC0YDQvtCyIEFkbWluSVRTTUNJUEFsbG9jYXRlINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU0xBINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TTEFQcmludCDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TTEFab29tINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNlcnZpY2Ug0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlUHJpbnQg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNlcnZpY2Vab29tINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICfQntCx0LfQvtGAIElUU00gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICfQntCx0LfQvtGAIElUU00g0YHQtdGA0LLQuNGB0L7Qsi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9Ci0LjQvyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAn0KLQuNC/INGB0L7RgdGC0L7Rj9C90LjRjyDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfQktC60LvRjtGH0LDQtdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0LzQsNGC0YDQuNGG0LXQuSDQv9GA0LjQvtGA0LjRgtC10YLQvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQutC90L7Qv9C60YMgItC90LDQt9Cw0LQiINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDINCh0LLRj9C30LDRgtGML0xpbmsg0LIg0LzQtdC90Y4g0KHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQutC90L7Qv9C60YMgItCf0LXRh9Cw0YLRjCIg0LIg0LzQtdC90Y4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwINCyIHByZWZlcmVuY2Ugdmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9Cn0LDRgdGC0Ywg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9Ce0YLQvdC+0YHQuNGC0YHRjyDQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8g0LTQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ9Ch0L/QuNGB0L7QuiBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ9Cf0LXRh9Cw0YLRjCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ9Cf0L7QtNGA0L7QsdC90L7RgdGC0LggU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn0KHQv9C40YHQvtC6INGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICfQn9C10YfQsNGC0Ywg0YHQtdGA0LLQuNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICfQn9C+0LTRgNC+0LHQvdC+0YHRgtC4INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfQntCx0LfQvtGAINGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGC0LjQvyDQuCDQvdCw0L/RgNCw0LLQu9C10L3QuNC1INGB0LLRj9C30Lgg0LTQu9GPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINC/0YDQuCDQstGL0YfQuNGB0LvQtdC90LjQuCDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwLiDQmtC70Y7RhyDRjdGC0L4g0LjQvNGPINGC0LjQv9CwINGB0LLRj9C30LggKNC60LDQuiDRjdGC0L4g0LfQsNC00LDQvdC+INCyIExpbmtPYmplY3Q6OlR5cGUpLCDQsCDQl9C90LDRh9C10L3QuNC1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QuNC1IEluY2lkZW50TGlua1R5cGUg0L3QsCDQvtGB0L3QvtCy0LDQvdC40Lgg0LrQvtGC0L7RgNC+0LPQviDQstGL0YfQuNGB0LvRj9C10YLRgdGPINGB0L7RgdGC0L7Rj9C90LjQtSDQuNC90YbQuNC00LXQvdGC0LAuINCd0LDQv9GA0LjQvNC10YAsINC10YHQu9C4IEluY2lkZW50TGlua1R5cGUg0YPRgdGC0LDQvdC+0LLQu9C10L0g0LIgXCfQl9Cw0LLQuNGB0LjRgiDQvtGCL0RlcGVuZHMgb25cJywg0Lgg0J3QsNC/0YDQsNCy0LvQtdC90LjQtSAtIFwn0JjRgdGC0L7Rh9C90LjQulwnLCDRgtC+INGC0L7Qu9GM0LrQviDRgdCy0Y/Qt9C4IFwn0JfQsNCy0LjRgdC40YIg0L7RglwnINCx0YPQtNGD0YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyAo0LAg0L3QtSDQv9GA0L7RgtC40LLQvtC/0L7Qu9C+0LbQvdCw0Y8gXCfQndC10L7QsdGF0L7QtNC40LzQviDQtNC70Y8vUmVxdWlyZWQgZm9yXCcpINC00LvRjyDQstGL0YfQuNGB0LvQtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwLiDQktGLINC80L7QttC10YLQtSDQtNC+0LHQsNCy0LjRgtGMINC00YDRg9Cz0LjQtSDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C1INGC0LjQv9GLINGB0LLRj9C30Lgg0Lgg0L3QsNC/0YDQsNCy0LvQtdC90LjRjyDQv9C+INGB0LLQvtC10LzRgyDQttC10LvQsNC90LjRjiwg0L3QsNC/0YDQuNC80LXRgCwgIFwn0JLQutC70Y7Rh9Cw0LXRgi9JbmNsdWRlc1wnINGBINC90LDQv9GA0LDQstC70LXQvdC40LXQvCBcJ9Cm0LXQu9GML1RhcmdldFwnLiDQtNC+0L/Rg9GB0LrQsNGO0YLRgdGPINCy0YHQtSDRgtC40L/RiyDRgdCy0Y/Qt9C4LCDQt9Cw0LTQsNC90L3Ri9C1INC/0LDRgNCw0LzQtdGC0YDQvtC8IExpbmtPYmplY3Q6OlR5cGUg0Lgg0L3QsNC/0YDQsNCy0LvQtdC90LjRjyDQvNC+0LPRg9GCINCx0YvRgtGMIFwn0JjRgdGC0L7Rh9C90LjQui9Tb3VyY2VcJywgXCfQptC10LvRjC9UYXJnZXRcJywg0LjQu9C4IFwn0J7QsdCwL0JvdGhcJy4g0JLQkNCW0J3Qnjog0J/QntCh0JvQlSDQmNCX0JzQldCd0JXQndCY0K8g0JfQndCQ0KfQldCd0JjQmSDQrdCi0J7Qk9CeINCf0JDQoNCQ0JzQldCi0KDQkCDQndCV0J7QkdCl0J7QlNCY0JzQniDQktCr0J/QntCb0J3QmNCi0Kwg0KHQmtCg0JjQn9CiIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlINCU0JvQryDQn9CV0KDQldCg0JDQodCn0JXQotCQINCS0KHQldClINCh0J7QodCi0J7Qr9Cd0JjQmSDQmNCd0KbQmNCU0JXQndCi0JAg0J3QkCDQntCh0J3QntCS0JUg0J3QntCS0KvQpSDQl9Cd0JDQp9CV0J3QmNCZISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01DaGFuZ2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdQYXJlbnRDaGlsZFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdDb25uZWN0ZWRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdJbmNsdWRlc1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1NlcnZpY2VcINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ1NlcnZpY2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ1NlcnZpY2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUGFyZW50Q2hpbGRcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdTZXJ2aWNlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQ29ubmVjdGVkVG9cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdJbmNsdWRlc1wnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAn0KjQuNGA0LjQvdCwIElUU00g0L/QvtC70Y8g0YLQuNC/0LAgdGV4dGFyZWEnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3JfQ3lybF9JVFNNQ29yZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eSd9ID0gJ9CX0L3QsNGH0LDRmCDihpQg0YPRgtC40YbQsNGYIOKGlCDQv9GA0LjQvtGA0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ9Cj0L/RgNCw0LLRmdCw0ZrQtSDRgNC10LfRg9C70YLQsNGC0L7QvCDQv9GA0LjQvtGA0LjRgtC10YLQsCDQutC+0LzQsdC40L3QvtCy0LDRmtC10Lwg0LfQvdCw0YfQsNGYIOKGlCDRg9GC0LjRhtCw0ZguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfQoNCw0YHQv9C+0LTQtdC70LAg0L/RgNC40L7RgNC40YLQtdGC0LAnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfQnNC40L3QuNC80LDQu9C90L4g0LLRgNC10LzQtSDQuNC30LzQtdGS0YMg0LjQvdGG0LjQtNC10L3QsNGC0LAnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfQl9C90LDRh9Cw0ZgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGY0LUg0L4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9CX0LDQtNGa0Lgg0L/Rg9GCINC/0YDQvtC80LXRmtC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQn9C+0YHQu9C10LTRmtC4INGY0LUg0LzQtdGa0LDQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn0J/QvtCy0LXQt9Cw0L3QuCDRgdC10YDQstC40YHQuCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICfQodC10YDQstC40YHQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9Ci0YDQtdC90YPRgtC90L4g0YHRgtCw0ZrQtSDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn0J/QvtCy0LXQt9Cw0L3QuCBTTEEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfQo9GC0LjRhtCw0ZgnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICfQndC40ZjQtSDQtNCw0YIgU0xBSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdTTEFJRCAlcyDQvdC40ZjQtSDQvdCw0ZLQtdC9INGDINCx0LDQt9C4INC/0L7QtNCw0YLQsNC60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICfQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQutCw0LvQtdC90LTQsNGAJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICfQndC40ZjQtSDQtNCw0YIgU2VydmljZUlEISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1NlcnZpY2VJRCAiJXMiINC90LjRmNC1INC90LDRktC10L0g0YMg0LHQsNC30Lgg0L/QvtC00LDRgtCw0LrQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ9Ci0YDQtdC90YPRgtC90L4g0YHRgtCw0ZrQtSDQuNC90YbQuNC00LXQvdGC0LAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHRgtCw0ZrQtSDQuNC90YbQuNC00LXQvdGC0LAnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn0J7Qv9C10YDQsNGC0LjQstC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfQmNC90YbQuNC00LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfQodC10YDQstC40YEg0LfQsCDQutGA0LDRmNGa0LXQsyDQutC+0YDQuNGB0L3QuNC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn0J/RgNC40YHRgtGD0L/QvdC4INC60YDQsNGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn0J/QvtC30LDQtNC40L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn0JjQoiDRg9C/0YDQsNCy0ZnQsNGa0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn0JjQt9Cy0LXRiNGC0LDQstCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUINC+0L/QtdGA0LDRgtC40LLQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfQlNC10LzQvtC90YHRgtGA0LDRhtC40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn0J/RgNC+0ZjQtdC60LDRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfQoyDQvtGB0L3QvtCy0Lgg0YPQs9C+0LLQvtGA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ9CU0L7RgdGC0YPQv9C90L7RgdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfQktGA0LXQvNC1INC+0LTQs9C+0LLQvtGA0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ9CS0YDQtdC80LUg0L7Qv9C+0YDQsNCy0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfQodGC0L7Qv9CwINGA0LXRiNCw0LLQsNGa0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn0KLRgNCw0L3RgdCw0LrRhtC40ZjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfQk9GA0LXRiNC60LUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ9CQ0LvRgtC10YDQvdCw0YLQuNCy0LAg0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAn0J7QsdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9Cf0L7QstC10LfQsNC90L4g0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQkNC60YbQuNGY0LUg0LPQtNC1INGY0LUg0LTRg9Cz0LzQtSDQv9C+0YHRgtCw0LLQutC4INC00L7RgdGC0YPQv9C90L4g0YMg0L/QvtCy0LXQt9Cw0L3QvtC8INCz0YDQsNGE0LjRh9C60L7QvCDQtdC70LXQvNC10L3RgtGDINC+0LHRmNC10LrRgtCwIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCc0L7Qu9C40LzQviDQtNCwINC40LzQsNGC0LUg0L3QsCDRg9C80YMg0LTQsCDQvtCy0LUg0JDQutGG0LjRmNC1INC80L7RgNCw0ZjRgyDQtNCwINCx0YPQtNGDINGA0LXQs9C40YHRgtGA0L7QstCw0L3QtSDRgyDRgdC70LXQtNC10ZvQuNC8IEpTINC4IENTUyDQtNCw0YLQvtGC0LXQutCw0LzQsDogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMg0LggQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQutC+0ZjQtSDQutC+0LvQvtC90LUg0YHRgyDQv9GA0LjQutCw0LfQsNC90LUg0YMg0L/QvtCy0LXQt9Cw0L3QvtC8INCz0YDQsNGE0LjRh9C60L7QvCDQtdC70LXQvNC10L3RgtGDINCh0LXRgNCy0LjRgdCwIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCd0LDQv9C+0LzQtdC90LA6INCh0LDQvNC+INCw0YLRgNC40LHRg9GC0Lgg0YHQtdGA0LLQuNGB0LAg0YHRgyDQtNC+0LfQstC+0ZnQtdC90Lgg0LfQsCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDQutC+0LvQvtC90LUuINCc0L7Qs9GD0ZvQtSDQv9C+0YHRgtCw0LLQutC1OiAwID0g0L7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INC00L7RgdGC0YPQv9C90L4sIDIgPSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDQsNC60YLQuNCy0LjRgNCw0L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ9CX0LDQstC40YHQuCDQvtC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRmNGDIEFkbWluSVRTTUNJUEFsbG9jYXRlINGDINC/0YDQvtGB0YLQvtGA0YMg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40ZjQsCDQv9GA0LjRgdGC0YPQv9C90L7QsyDQvNC+0LTRg9C70LAg0LfQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjRgyBBZ2VudElUU01TTEEg0L7QsdGY0LXQutGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0L/RgNC40YHRgtGD0L/QvdC+0LMg0LzQvtC00YPQu9CwINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0YMgQWdlbnRJVFNNU0xBUHJpbnQg0L7QsdGY0LXQutGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40ZjQsCDQv9GA0LjRgdGC0YPQv9C90L7QsyDQvNC+0LTRg9C70LAg0LfQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjRgyBBZ2VudElUU01TTEFab29tINC+0LHRmNC10LrRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0L/RgNC40YHRgtGD0L/QvdC+0LMg0LzQvtC00YPQu9CwINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0YMgQWdlbnRJVFNNU2VydmljZSDQvtCx0ZjQtdC60YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0L/RgNC40YHRgtGD0L/QvdC+0LMg0LzQvtC00YPQu9CwINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0YMgQWdlbnRJVFNNU2VydmljZVByaW50INC+0LHRmNC10LrRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRmNGDIEFnZW50SVRTTVNlcnZpY2Vab29tINC+0LHRmNC10LrRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnSVRTTSDQv9GA0LXQs9C70LXQtCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNNINC/0YDQtdCz0LvQtdC0INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAn0KLQuNC/INGB0YLQsNGa0LAg0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUuJ30gPSAn0KLQuNC/INGB0YLQsNGa0LAg0LjQvdGG0LjQtNC10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9Cj0LrRmdGD0YfRg9GY0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfQo9GA0LXQtNC40YLQuCDQvNCw0YLRgNC40YbRgyDQv9GA0LjQvtGA0LjRgtC10YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQuNC60LDQtyDQstC10LfQtSDQt9CwINCy0YDQsNGb0LDRmtC1INGDIFNMQSDQvNC10L3QuNGY0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQuNC60LDQtyDQstC10LfQtSDQt9CwINCy0YDQsNGb0LDRmtC1INGDINGB0LXRgNCy0LjRgdC90L7QvCDQvNC10L3QuNGY0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQuNC60LDQtyDQstC10LfQtSDRgyDRgdC10YDQstC40YHQvdC+0Lwg0LzQtdC90LjRmNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0LjQutCw0Lcg0LLQtdC30LUg0LfQsCDRiNGC0LDQvNC/0YMg0YMgU0xBINC80LXQvdC40ZjRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQuNC60LDQtyDQstC10LfQtSDQt9CwINGI0YLQsNC80L/RgyDRgyDRgdC10YDQstC40YHQvdC+0Lwg0LzQtdC90LjRmNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAg0LjQvdGG0LjQtNC10L3RgtC90LUg0YHRgtCw0YLRg9GB0LUg0YMg0L/RgNC40LrQsNC30YMg0L/QvtC00LXRiNCw0LLQsNGa0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfQodCw0YHRgtCw0LLQvdC4INC00LXQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9CjINC30LDQstC40YHQvdC+0YHRgtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ9Ce0LHQsNCy0LXQt9C90L4g0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICfQn9GA0LXQs9C70LXQtCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ9Co0YLQsNC80L/QsCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ9CU0LXRgtCw0ZnQuCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfQn9GA0LXQs9C70LXQtCDRgdC10YDQstC40YHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ9Co0YLQsNC80L/QsCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ9CU0LXRgtCw0ZnQuCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn0J/RgNC+0YHRgtC+0YAg0YHQtdGA0LLQuNGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAn0J/QvtC00LXRiNCw0LLQsCDRgtC40L8g0Lgg0YHQvNC10YAg0LLQtdC30LAg0LrQvtGY0Lgg0ZvQtSDRgdC1INC60L7RgNC40YHRgtC40YLQuCDQt9CwINGD0YLQstGA0ZLQuNCy0LDRmtC1INGB0YLQsNGa0LAg0LjQvdGG0LjQtNC10L3RgtCwLiDQmtGZ0YPRhyDRmNC1INC90LDQt9C40LIg0YLQuNC/0LAg0LLQtdC30LUgKNC60LDQviDRiNGC0L4g0ZjQtSDQtNC10YTQuNC90LjRgdCw0L3QviDRgyBMaW5rT2JqZWN0OjpUeXBlKSwg0LAg0LLRgNC10LTQvdC+0YHRgiDRmNC1INGB0LzQtdGAIEluY2lkZW50TGlua1R5cGUg0LrQvtGY0Lgg0YLRgNC10LHQsCDQuNGB0L/RgNCw0YLQuNGC0Lgg0LfQsCDQvtC00YDQtdGS0LjQstCw0ZrQtSDRgdGC0LDRmtCwINC40L3RhtC40LTQtdC90YLQsC4g0J3QsCDQv9GA0LjQvNC10YAsINCw0LrQviDRmNC1IEluY2lkZW50TGlua1R5cGUg0L/QvtC00LXRiNC10L0g0L3QsCBEZXBlbmRzT24g0Lgg0YHQvNC10YAg0ZjQtSBTb3VyY2UsINGB0LDQvNC+INCy0LXQt9CwICLQl9Cw0LLQuNGB0Lgg0L7QtCIg0ZvQtSDQsdC40YLQuCDQv9GA0LDRm9C10L3QsCAo0LAg0L3QtdGb0LUg0Lgg0YHRg9C/0YDQvtGC0L3QsCDQstC10LfQsCAi0J3QtdC+0L/RhdC+0LTQvdC+INC30LAiKSDRgyDQvtC00YDQtdGS0LjQstCw0ZrRgyDRgdGC0LDRmtCwINC40L3RhtC40LTQtdC90YLQsC4g0KPQutC+0LvQuNC60L4g0LbQtdC70LjRgtC1INC80L7QttC1INC00L7QtNCw0YLQuCDRmNC+0Ygg0YLQuNC/0L7QstCwINC4INGB0LzQtdGA0L7QstCwINCy0LXQt9CwLCDQvdC/0YAuICLQo9C60ZnRg9GH0YPRmNC1IiDRgdCwINGB0LzQtdGA0L7QvCAi0KbQuNGZIi4g0KHQstC4INGC0LjQv9C+0LLQuCDQstC10LfQsCDQtNC10YTQuNC90LjRgdCw0L3QuCDRgyDRgdC40YHRgtC10LzRgdC60L7RmCDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjQuCBMaW5rT2JqZWN0OjpUeXBlINGB0YMg0LzQvtCz0YPRm9C4INC4INGB0LzQtdGAINC80L7QttC1INCx0LjRgtC4ICLQmNC30LLQvtGAIiwgItCm0LjRmSIg0LjQu9C4ICLQntCx0LAiLiDQktCQ0JbQndCeOiDQndCQ0JrQntCdINCY0JfQnNCV0J3QlSDQntCf0KbQmNCI0JAg0KHQmNCh0KLQldCc0KHQmtCVINCa0J7QndCk0JjQk9Cj0KDQkNCm0JjQiNCVINCc0J7QoNCQ0KLQlSDQn9Ce0JrQoNCV0J3Qo9Ci0Jgg0KHQmtCg0JjQn9CiIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlINCU0JAg0JHQmCDQodCS0JAg0KHQotCQ0IrQkCDQmNCd0KbQmNCU0JXQndCi0JAg0JHQmNCb0JAg0J/QntCd0J7QktCeINCj0KLQktCg0ILQldCd0JAg0J3QkCDQntCh0J3QntCS0KMg0J3QntCS0JjQpSDQn9Ce0JTQldCo0JDQktCQ0IrQkCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiINC+0LHRmNC10LrQsNGCIElUU00g0L/RgNC+0LzQtdC90LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0Lwg0YLQuNC60LXRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0LwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgUGFyZW50Q2hpbGQg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJSZWxldmFudFRvIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJBbHRlcm5hdGl2ZVRvIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiRGVwZW5kc09uIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIlJlbGV2YW50VG8iINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0Lwg0YHQtdGA0LLQuNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJBbHRlcm5hdGl2ZVRvIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiRGVwZW5kc09uIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIlJlbGV2YW50VG8iINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0Lwg0YLQuNC60LXRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJBbHRlcm5hdGl2ZVRvIiDQvtCx0ZjQtdC6YdGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC00YDRg9Cz0LjQvCDQvtCx0ZjQtdC60YLQvtC8IElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJDb25uZWN0ZWRUbyIg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJEZXBlbmRzT24iINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC00YDRg9Cz0LjQvCDQvtCx0ZjQtdC60YLQvtC8IElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJJbmNsdWRlcyIg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiUmVsZXZhbnRUbyIg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIkRlcGVuZHNPbiIg0L7QsdGY0LXQutCw0YIgSVRTTSDRgNCw0LTQvdC4INC90LDQu9C+0LMg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIk5vcm1hbCIg0L7QsdGY0LXQutCw0YIgSVRTTSDRgNCw0LTQvdC4INC90LDQu9C+0LMg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiRGVwZW5kc09uIiDQvtCx0ZjQtdC60LDRgiBJVFNNINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiTm9ybWFsIiDQvtCx0ZjQtdC60LDRgiBJVFNNINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiINC+0LHRmNC10LrQsNGCIElUU00g0YDQsNC00L3QuCDQvdCw0LvQvtCzINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0L7QsdGY0LXQutCw0YIg0YHQtdGA0LLQuNGBINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8IEZBUSDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC+0LHRmNC10LrQsNGCINGB0LXRgNCy0LjRgSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCBGQVEg0LLQtdC30L7QvCDRgtC40L/QsCAiUGFyZW50Q2hpbGQiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0L7QsdGY0LXQutCw0YIg0YHQtdGA0LLQuNGBINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8IEZBUSDQstC10LfQvtC8INGC0LjQv9CwICJSZWxldmFudFRvIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LLQtdC30YMg0YLQuNC/0LAgIkFsdGVybmF0aXZlVG8iLiDQkNC60L4g0LjQt9Cy0L7RgNC90Lgg0Lgg0YbQuNGZ0L3QuCDQvdCw0LfQuNCyINGB0LDQtNGA0LbQtSDQuNGB0YLRgyDQstGA0LXQtNC90L7RgdGCLCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0L3QtdGD0YHQvNC10YDQtdC90LAuINCQ0LrQviDRgdGDINCy0YDQtdC00L3QvtGB0YLQuCDRgNCw0LfQu9C40YfQuNGC0LUsINGA0LXQt9GD0LvRgtGD0ZjRg9Gb0LAg0LLQtdC30LAg0ZjQtSDRg9GB0LzQtdGA0LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LLQtdC30YMg0YLQuNC/0LAgIkNvbm5lY3RlZFRvIi4g0JDQutC+INC40LfQstC+0YDQvdC4INC4INGG0LjRmdC90Lgg0L3QsNC30LjQsiDRgdCw0LTRgNC20LUg0LjRgdGC0YMg0LLRgNC10LTQvdC+0YHRgiwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INC90LXRg9GB0LzQtdGA0LXQvdCwLiDQkNC60L4g0YHRgyDQstGA0LXQtNC90L7RgdGC0Lgg0YDQsNC30LvQuNGH0LjRgtC1LCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0YPRgdC80LXRgNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0LTQtdGE0LjQvdC40YjQtSDQstC10LfRgyDRgtC40L/QsCAiRGVwZW5kc09uIi4g0JDQutC+INC40LfQstC+0YDQvdC4INC4INGG0LjRmdC90Lgg0L3QsNC30LjQsiDRgdCw0LTRgNC20LUg0LjRgdGC0YMg0LLRgNC10LTQvdC+0YHRgiwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INC90LXRg9GB0LzQtdGA0LXQvdCwLiDQkNC60L4g0YHRgyDQstGA0LXQtNC90L7RgdGC0Lgg0YDQsNC30LvQuNGH0LjRgtC1LCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0YPRgdC80LXRgNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQtNC10YTQuNC90LjRiNC1INCy0LXQt9GDINGC0LjQv9CwICJJbmNsdWRlcyIuINCQ0LrQviDQuNC30LLQvtGA0L3QuCDQuCDRhtC40ZnQvdC4INC90LDQt9C40LIg0YHQsNC00YDQttC1INC40YHRgtGDINCy0YDQtdC00L3QvtGB0YIsINGA0LXQt9GD0LvRgtGD0ZjRg9Gb0LAg0LLQtdC30LAg0ZjQtSDQvdC10YPRgdC80LXRgNC10L3QsC4g0JDQutC+INGB0YMg0LLRgNC10LTQvdC+0YHRgtC4INGA0LDQt9C70LjRh9C40YLQtSwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INGD0YHQvNC10YDQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQtNC10YTQuNC90LjRiNC1INCy0LXQt9GDINGC0LjQv9CwICJSZWxldmFudFRvIi4g0JDQutC+INC40LfQstC+0YDQvdC4INC4INGG0LjRmdC90Lgg0L3QsNC30LjQsiDRgdCw0LTRgNC20LUg0LjRgdGC0YMg0LLRgNC10LTQvdC+0YHRgiwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INC90LXRg9GB0LzQtdGA0LXQvdCwLiDQkNC60L4g0YHRgyDQstGA0LXQtNC90L7RgdGC0Lgg0YDQsNC30LvQuNGH0LjRgtC1LCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0YPRgdC80LXRgNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAn0KjQuNGA0LjQvdCwIElUU00g0L/RgNC+0YHRgtC+0YDQsCDRgtC10LrRgdGC0LAuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3JfTGF0bl9JVFNNQ29yZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eSd9ID0gJ1puYcSNYWogIOKGlCBVdGljYWog4oaUIFByaW9yaXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnVXByYXZsamFuamUgcmV6dWx0YXRvbSBwcmlvcml0ZXRhIGtvbWJpbm92YW5qZW0gWm5hxI1haiDihpQgVXRpY2FqLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnUmFzcG9kZWxhIHByaW9yaXRldGEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbWFsbm8gdnJlbWUgaXptZcSRdSBpbmNpZGVuYXRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnWm5hxI1haic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpamUgbyBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnWmFkbmppIHB1dCBwcm9tZW5qZW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1Bvc2xlZG5qaSBqZSBtZW5qYW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1BvdmV6YW5pIHNlcnZpc2knOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnU2VydmlzbmEgaW5mb3JtYWNpamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ1RyZW51dG5vIHN0YW5qZSBpbmNpZGVudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnUG92ZXphbmkgU0xBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnVXRpY2FqJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnTmlqZSBkYXQgU0xBSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdTTEFJRCAlcyBuaWplIG5hxJFlbiB1IGJhemkgcG9kYXRha2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICdQb2RyYXp1bWV2YW5pIGthbGVuZGFyJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICdOaWplIGRhdCBTZXJ2aWNlSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICIlcyIgbmlqZSBuYcSRZW4gdSBiYXppIHBvZGF0YWthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnVHJlbnV0bm8gc3RhbmplIGluY2lkZW50YSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGFuamUgaW5jaWRlbnRhJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2bmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmlzIHphIGtyYWpuamVnIGtvcmlzbmlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdQcmlzdHVwbmkga3Jhaic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ1BvemFkaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCB1cHJhdmxqYW5qZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdJenZlxaF0YXZhbmplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgb3BlcmF0aXZubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhY2lqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVSBvc25vdmkgdWdvdm9yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0RydWdvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3R1cG5vc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1ZyZW1lIG9kZ292b3JhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdWcmVtZSBvcG9yYXZrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdTdG9wYSByZcWhYXZhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtjaWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0dyZcWha2UnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXZhIHphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICdPYmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnUG92ZXphbm8gbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBBa2NpamUgZ2RlIGplIGR1Z21lIHBvc3RhdmtpIGRvc3R1cG5vIHUgcG92ZXphbm9tIGdyYWZpxI1rb20gZWxlbWVudHUgb2JqZWt0YSAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBNb2xpbW8gZGEgaW1hdGUgbmEgdW11IGRhIG92ZSBBa2NpamUgbW9yYWp1IGRhIGJ1ZHUgcmVnaXN0cm92YW5lIHUgc2xlZGXEh2ltIEpTIGkgQ1NTIGRhdG90ZWthbWE6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGkgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pxaFlIGtvamUga29sb25lIHN1IHByaWthemFuZSB1IHBvdmV6YW5vbSBncmFmacSNa29tIGVsZW1lbnR1IFNlcnZpc2EgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTmFwb21lbmE6IFNhbW8gYXRyaWJ1dGkgc2VydmlzYSBzdSBkb3p2b2xqZW5pIHphIHBvZHJhenVtZXZhbmUga29sb25lLiBNb2d1xIdlIHBvc3RhdmtlOiAwID0gb25lbW9ndcSHZW5vLCAxID0gZG9zdHVwbm8sIDIgPSBwb2RyYXp1bWV2YW5vIGFrdGl2aXJhbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdaYXZpc2kgb2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyYWNpamEgcHJpc3R1cG5vZyBtb2R1bGEgemEga29uZmlndXJhY2lqdSBBZG1pbklUU01DSVBBbGxvY2F0ZSB1IHByb3N0b3J1IGFkbWluaXN0cmF0b3JhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmFjaWphIHByaXN0dXBub2cgbW9kdWxhIHphIGtvbmZpZ3VyYWNpanUgQWdlbnRJVFNNU0xBIG9iamVrdGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmFjaWphIHByaXN0dXBub2cgbW9kdWxhIHphIGtvbmZpZ3VyYWNpanUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWt0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBrb25maWd1cmFjaWp1IEFnZW50SVRTTVNMQVpvb20gb2JqZWt0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBrb25maWd1cmFjaWp1IEFnZW50SVRTTVNlcnZpY2Ugb2JqZWt0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmFjaWphIHByaXN0dXBub2cgbW9kdWxhIHphIGtvbmZpZ3VyYWNpanUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVrdGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmFjaWphIHByaXN0dXBub2cgbW9kdWxhIHphIGtvbmZpZ3VyYWNpanUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWt0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdJVFNNIHByZWdsZWQgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnSVRTTSBwcmVnbGVkIHNlcnZpc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdUaXAgc3RhbmphIGluY2lkZW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ1RpcCBzdGFuamEgaW5jaWRlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ1VrbGp1xI11amUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdVcmVkaXRpIG1hdHJpY3UgcHJpb3JpdGV0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwgemEgcHJpa2F6IHZlemUgemEgdnJhxIdhbmplIHUgU0xBIG1lbmlqdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCB6YSBwcmlrYXogdmV6ZSB6YSB2cmHEh2FuamUgdSBzZXJ2aXNub20gbWVuaWp1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHphIHByaWtheiB2ZXplIHUgc2Vydmlzbm9tIG1lbmlqdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNb2R1bCB6YSBwcmlrYXogdmV6ZSB6YSDFoXRhbXB1IHUgU0xBIG1lbmlqdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgemEgcHJpa2F6IHZlemUgemEgxaF0YW1wdSB1IHNlcnZpc25vbSBtZW5panUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0cmkgemEgaW5jaWRlbnRuZSBzdGF0dXNlIHUgcHJpa2F6dSBwb2RlxaFhdmFuamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdTYXN0YXZuaSBkZW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdVIHphdmlzbm9zdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnT2JhdmV6bm8gemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnUHJlZ2xlZCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ8WgdGFtcGEgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdEZXRhbGppIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1ByZWdsZWQgc2VydmlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ8WgdGFtcGEgc2VydmlzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ0RldGFsamkgc2VydmlzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnUHJvc3RvciBzZXJ2aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ1BvZGXFoWF2YSB0aXAgaSBzbWVyIHZlemEga29qaSDEh2Ugc2Uga29yaXN0aXRpIHphIHV0dnLEkWl2YW5qZSBzdGFuamEgaW5jaWRlbnRhLiBLbGp1xI0gamUgbmF6aXYgdGlwYSB2ZXplIChrYW8gxaF0byBqZSBkZWZpbmlzYW5vIHUgTGlua09iamVjdDo6VHlwZSksIGEgdnJlZG5vc3QgamUgc21lciBJbmNpZGVudExpbmtUeXBlIGtvamkgdHJlYmEgaXNwcmF0aXRpIHphIG9kcmXEkWl2YW5qZSBzdGFuamEgaW5jaWRlbnRhLiBOYSBwcmltZXIsIGFrbyBqZSBJbmNpZGVudExpbmtUeXBlIHBvZGXFoWVuIG5hIERlcGVuZHNPbiBpIHNtZXIgamUgU291cmNlLCBzYW1vIHZlemEgIlphdmlzaSBvZCIgxIdlIGJpdGkgcHJhxIdlbmEgKGEgbmXEh2UgaSBzdXByb3RuYSB2ZXphICJOZW9waG9kbm8gemEiKSB1IG9kcmXEkWl2YW5qdSBzdGFuamEgaW5jaWRlbnRhLiBVa29saWtvIMW+ZWxpdGUgbW/FvmUgZG9kYXRpIGpvxaEgdGlwb3ZhIGkgc21lcm92YSB2ZXphLCBucHIuICJVa2xqdcSNdWplIiBzYSBzbWVyb20gIkNpbGoiLiBTdmkgdGlwb3ZpIHZlemEgZGVmaW5pc2FuaSB1IHNpc3RlbXNrb2oga29uZmlndXJhY2lqaSBMaW5rT2JqZWN0OjpUeXBlIHN1IG1vZ3XEh2kgaSBzbWVyIG1vxb5lIGJpdGkgIkl6dm9yIiwgIkNpbGoiIGlsaSAiT2JhIi4gVkHFvU5POiBOQUtPTiBJWk1FTkUgT1BDSUpBIFNJU1RFTVNLRSBLT05GSUdVUkFDSUpFIE1PUkFURSBQT0tSRU5VVEkgU0tSSVBUIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIERBIEJJIFNWQSBTVEFOSkEgSU5DSURFTlRBIEJJTEEgUE9OT1ZPIFVUVlLEkEVOQSBOQSBPU05PVlUgTk9WSUggUE9ERcWgQVZBTkpBISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiTm9ybWFsIiBvYmpla2F0IElUU00gcHJvbWVuYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHRpa2V0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJOb3JtYWwiIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhIFBhcmVudENoaWxkIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIlJlbGV2YW50VG8iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJBbHRlcm5hdGl2ZVRvIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gc2VydmlzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiRGVwZW5kc09uIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gc2VydmlzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIlJlbGV2YW50VG8iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBzZXJ2aXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJBbHRlcm5hdGl2ZVRvIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gdGlrZXRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIkRlcGVuZHNPbiIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHRpa2V0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiUmVsZXZhbnRUbyIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHRpa2V0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJBbHRlcm5hdGl2ZVRvIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2EgZHJ1Z2ltIG9iamVrdG9tIElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJDb25uZWN0ZWRUbyIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIGRydWdpbSBvYmpla3RvbSBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIkRlcGVuZHNPbiIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIGRydWdpbSBvYmpla3RvbSBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiSW5jbHVkZXMiIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBkcnVnaW0gb2JqZWt0b20gSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiUmVsZXZhbnRUbyIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIGRydWdpbSBvYmpla3RvbSBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiRGVwZW5kc09uIiBvYmpla2F0IElUU00gcmFkbmkgbmFsb2cgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiTm9ybWFsIiBvYmpla2F0IElUU00gcmFkbmkgbmFsb2cgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJEZXBlbmRzT24iIG9iamVrYXQgSVRTTSByYWRuaSBuYWxvZyBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHNlcnZpc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiTm9ybWFsIiBvYmpla2F0IElUU00gcmFkbmkgbmFsb2cgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBzZXJ2aXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiTm9ybWFsIiBvYmpla2F0IElUU00gcmFkbmkgbmFsb2cgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBvYmpla2F0IHNlcnZpcyBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIEZBUSB2ZXpvbSB0aXBhICJOb3JtYWwiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBvYmpla2F0IHNlcnZpcyBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIEZBUSB2ZXpvbSB0aXBhICJQYXJlbnRDaGlsZCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgb2JqZWthdCBzZXJ2aXMgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBGQVEgdmV6b20gdGlwYSAiUmVsZXZhbnRUbyIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgZGVmaW5pxaFlIHZlenUgdGlwYSAiQWx0ZXJuYXRpdmVUbyIuIEFrbyBpenZvcm5pIGkgY2lsam5pIG5heml2IHNhZHLFvmUgaXN0dSB2cmVkbm9zdCwgcmV6dWx0dWp1xIdhIHZlemEgamUgbmV1c21lcmVuYS4gQWtvIHN1IHZyZWRub3N0aSByYXpsacSNaXRlLCByZXp1bHR1anXEh2EgdmV6YSBqZSB1c21lcmVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgZGVmaW5pxaFlIHZlenUgdGlwYSAiQ29ubmVjdGVkVG8iLiBBa28gaXp2b3JuaSBpIGNpbGpuaSBuYXppdiBzYWRyxb5lIGlzdHUgdnJlZG5vc3QsIHJlenVsdHVqdcSHYSB2ZXphIGplIG5ldXNtZXJlbmEuIEFrbyBzdSB2cmVkbm9zdGkgcmF6bGnEjWl0ZSwgcmV6dWx0dWp1xIdhIHZlemEgamUgdXNtZXJlbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBkZWZpbmnFoWUgdmV6dSB0aXBhICJEZXBlbmRzT24iLiBBa28gaXp2b3JuaSBpIGNpbGpuaSBuYXppdiBzYWRyxb5lIGlzdHUgdnJlZG5vc3QsIHJlenVsdHVqdcSHYSB2ZXphIGplIG5ldXNtZXJlbmEuIEFrbyBzdSB2cmVkbm9zdGkgcmF6bGnEjWl0ZSwgcmV6dWx0dWp1xIdhIHZlemEgamUgdXNtZXJlbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIGRlZmluacWhZSB2ZXp1IHRpcGEgIkluY2x1ZGVzIi4gQWtvIGl6dm9ybmkgaSBjaWxqbmkgbmF6aXYgc2FkcsW+ZSBpc3R1IHZyZWRub3N0LCByZXp1bHR1anXEh2EgdmV6YSBqZSBuZXVzbWVyZW5hLiBBa28gc3UgdnJlZG5vc3RpIHJhemxpxI1pdGUsIHJlenVsdHVqdcSHYSB2ZXphIGplIHVzbWVyZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIGRlZmluacWhZSB2ZXp1IHRpcGEgIlJlbGV2YW50VG8iLiBBa28gaXp2b3JuaSBpIGNpbGpuaSBuYXppdiBzYWRyxb5lIGlzdHUgdnJlZG5vc3QsIHJlenVsdHVqdcSHYSB2ZXphIGplIG5ldXNtZXJlbmEuIEFrbyBzdSB2cmVkbm9zdGkgcmF6bGnEjWl0ZSwgcmV6dWx0dWp1xIdhIHZlemEgamUgdXNtZXJlbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ8WgaXJpbmEgSVRTTSBwcm9zdG9yYSB0ZWtzdGEuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3dfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICdVbXVoaW11IOKGlCBNYWRoYXJhIOKGlCBLaXBhdW1iZWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdTaW1hbWlhIG1hdG9rZW8geWEga2lwYXVtYmVsZSB5YSBrdXVuZ2FuaXNoYSBVbXVoaW11ICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnS3V3ZWthIGtpcGF1bWJlbGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdLaW1hIGNoYSBjaGluaSBjaGEgbXVkYSBrYXRpIHlhIG1hdHVraW8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVbXVoaW11JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdUYWFyaWZhIHphIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdNd2lzaG8ga3ViYWRpbGlzaHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ013c2hvIGt1YmFkaWxpc2h3YSBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnSHVkdW1hIHppbmF6b2h1c2lrYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdUYWFyaWZhIHphIGh1ZHVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnSGFsaSB5YSB0dWtpbyBsYSBzYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSB6aW5hem9odXNpa2EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdNYWRoYXJhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdIYWxpIHlhIHR1a2lvIGxhIHNhc2EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnSGFsaSB5YSB0dWtpbyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdVZW5kZXNoYWppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnVHVraW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0h1ZHVtYSB5YSBtdHVtaWFqaSB3YSBtd2loc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnTWF6aW5naXJhIHlhIG1iZWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnTWF6aW5naXJhIHlhIG55dW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdVc2ltYW1pemkgd2EgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnVWFyaWZ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnVWVuZGVzaGFqaSB3YSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnTWFvbnllc2hvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdNcmFkaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdNa2F0YWJhIHdhIGt1aW1hcmlzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdFbmdpbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVXBhdGlrYW5hamknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ011ZGEgd2EgbWFqaWJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdNdWRhIHdhIGt1cG9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdLaXdhbmdvIGNoYSBtdW9uZWthbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnTWlhbWFsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdNYWtvc2EnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0JhZGFsYSB5YSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQm90aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdJbWV1bmdhbmlzaHdhIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnSW5hdGVnZW1lYW5hIG5hICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHphIG1hemluZ2lyYSB5YSBtYmVsZSBrd2EgdXNhbmlkaSB3YSBBZG1pbklUU01DSVBBbGxvY2F0ZSBrYXRpa2EgZW5lbyBsYSBraW9uZ296aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIElUU01TTEEgY2hhIHdha2FsYSAga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSAgdWNoYXBpc2h3YWppIGNoYSBJVFNNU0xBIGNoYSB3YWthbGEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXNhamlsaSB3YSBtb2R1bGkgeWEgbWF6aW5naXJhIHlhIG1iZWxlIGt3YSBraXBlbmdlZSBjaGEga3VrdXp3YSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGh1ZHVtYSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGt1Y2hhcGlzaHdhIGt3YSBodWR1bWEgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGt1a3V6d2Ega3dhIGh1ZHVtYSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luYWh1c2lzaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdTaW1hbWlhIG1hdHJpa2kgeWEga2lwYXVtYmVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdXJ1ZGkgbnl1bWEga2F0aWthIG1lbnl1IHlhIHNsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga3VydWRpIG55dW1hIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWxpIHlhIGt1b255ZXNoYSBraXVuZ28gY2hhIGtpdW5nbyBrYXRpa2EgbWVueXUgeWEgaHVkdW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdWNoYXBpc2hhIGthdGlrYSBtZW55dSB5YSBzbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdWNoYXBpc2hhIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdWaWdlem8geWEgaGFsaSB5YSBtYXR1a2lvIGthdGlrYSBtYW5kaGFyaSB5YSBtYXBlbmRlbGVvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnU2VoZW11IHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnSHVzaWFuYSBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdJbmFoaXRhamlrYSBrd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnTWFyZWplbyB5YSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ01hcmVqZW8geWEgaHVkdW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnRW5lbyBsYSBodWR1bWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdHJzLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0JhZGlsaWtvIGxhIElUU01cJyBraW53ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdLYXdhaWRhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmFodXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ1Rpa2V0aVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnQmFkYWxhIHlhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdW5nYW5pc2h3YSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSHVzaXNoYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyAga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdGVnZW1lYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ01wYW5naWxpbyB3YSBrYXppIHdhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0h1ZHVtYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdNcGFuZ2lsaW8gd2Ega2F6aSB3YSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ01hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnTWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdIdXNpYW5hIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdCYWRhbGEgeWFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbmFjaG90b2thbmEgbmkgaGFraW5hIHVlbGVrZW8uIEthbWEgdGhhbWFuaSBuaSB0b2ZhdXRpLCBraXVuZ28ga2lsaWNob3Rva2VhIGtpbmEgdWVsZWtlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdJbWV1bmdhbmlzaHdhIG5hXCcuIEthbWEgamluYSBsYSBjaGFuem8gbmEgamluYSBsZW5nd2EgeWFuYSB0aGFtYW5pIG1vamEsIGtpdW5nbyBraW5hY2hvdG9rYW5hIG5pIGhha2luYSB1ZWxla2VvLiBLYW1hIHRoYW1hbmkgbmkgdG9mYXV0aSwga2l1bmdvIGtpbGljaG90b2tlYSBraW5hIHVlbGVrZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLiBLYW1hIGppbmEgbGEgY2hhbnpvIG5hIGppbmEgbGVuZ3dhIHlhbmEgdGhhbWFuaSBtb2phLCBraXVuZ28ga2luYWNob3Rva2FuYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0luYWh1c2lzaGFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbGljaG90b2tlYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdNaXBhbmdpbGlvIGhpaSBpbmFmYWZhbnVhIGFpbmEgeWEga2l1bmdvIFwnSHVzaWFuYSBuYVwnLiBLYW1hIGppbmEgbGEgY2hhbnpvIG5hIGppbmEgbGVuZ3dhIHlhbmEgdGhhbWFuaSBtb2phLCBraXVuZ28ga2lsaWNob3Rva2VhIG5pIGhha2luYSB1ZWxla2VvLiBLYW1hIHRoYW1hbmkgbmkgdG9mYXV0aSwga2l1bmdvIGtpbGljaG90b2tlYSBraW5hIHVlbGVrZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ1VwYW5hIHdhIGVuZW8gbGEgbWF0aW5pIGxhIElUU00gJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6dGhfVEhfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfguKfguLTguIHguKTguJXihpQg4Lic4Lil4LiB4Lij4Liw4LiX4LiaIOKGlCDguYDguKPguLXguKLguIfguKXguLPguJTguLHguJrguITguKfguLLguKHguKrguLPguITguLHguI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4iOC4seC4lOC4geC4suC4o+C4iOC4seC4lOC4peC4s+C4lOC4seC4muC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC4guC4reC4h+C4nOC4peC4geC4suC4o+C4nOC4quC4oeC4nOC4quC4suC4meC4p+C4tOC4geC4pOC4leKGlCDguJzguKXguIHguKPguLDguJfguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ+C4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C4peC4s+C4lOC4seC4muC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ+C5gOC4p+C4peC4suC4guC4seC5ieC4meC4leC5iOC4s+C4o+C4sOC4q+C4p+C5iOC4suC4h+C5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jOC4l+C4teC5iOC5gOC4geC4tOC4lOC4guC4tuC5ieC4mSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ+C4p+C4tOC4geC4pOC4lSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAn4LiC4LmJ4Lit4Lih4Li54LilIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKXguYjguLLguKrguLjguJQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4Lil4LmI4Liy4Liq4Li44LiU4LmC4LiU4LiiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfguIHguLLguKPguJrguKPguLTguIHguLLguKPguJfguLXguYjguYDguIHguLXguYjguKLguKfguILguYnguK3guIcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn4LiC4LmJ4Lit4Lih4Li54Lil4LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfguKrguJbguLLguJnguKDguLLguJ7guILguK3guIfguYDguKvguJXguYzguIHguLLguKPguJPguYzguJvguLHguIjguIjguLjguJrguLHguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBc+C4l+C4teC5iOC5gOC4geC4teC5iOC4ouC4p+C4guC5ieC4reC4hyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+C4nOC4peC4geC4o+C4sOC4l+C4mic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmA4Lir4LiV4LmM4LiB4Liy4Lij4LiT4LmM4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+C4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C5gOC4q+C4leC5jOC4geC4suC4o+C4k+C5jCc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfguIHguLLguKPguJTguLPguYDguJnguLTguJnguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfguYDguKvguJXguLjguIHguLLguKPguJPguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+C4nOC4ueC5ieC5g+C4iuC5ieC4muC4o+C4tOC4geC4suC4o+C4guC4seC5ieC4meC4quC4uOC4lOC4l+C5ieC4suC4oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udCBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrIEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn4LiB4Liy4Lij4LiI4Lix4LiU4LiB4Liy4Lij4LmE4Lit4LiX4Li1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+C4geC4s+C4peC4seC4h+C4o+C4suC4ouC4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ+C4geC4suC4o+C4lOC4s+C5gOC4meC4tOC4meC4h+C4suC4meC5hOC4reC4l+C4tSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn4LiB4Liy4Lij4Lit4LiY4Li04Lia4Liy4LiiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfguYLguJvguKPguYDguIjguIQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn4Liq4Lix4LiN4LiN4Liy4LiB4Liy4Lij4Lir4LiZ4Li44LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAn4Lit4Li34LmI4LiZ4LmGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ+C4hOC4p+C4suC4oeC4nuC4o+C5ieC4reC4oeC5g+C4iuC5ieC4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn4Lij4Liw4Lii4Liw4LmA4Lin4Lil4Liy4LiB4Liy4Lij4LiV4Lit4Lia4Liq4LiZ4Lit4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfguYDguKfguKXguLLguIHguLLguKPguIHguLnguYnguITguLfguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn4Lit4Lix4LiV4Lij4Liy4LiB4Liy4Lij4LmB4LiB4LmJ4Lib4Lix4LiN4Lir4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ+C4geC4suC4o+C4l+C4s+C4o+C4suC4ouC4geC4suC4oyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfguILguYnguK3guJzguLTguJTguJ7guKXguLLguJQnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ+C5gOC4peC4t+C4reC4geC4l+C4teC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCb3RoJ30gPSAn4LiX4Lix4LmJ4LiH4Lir4Lih4LiUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C5hOC4m+C4ouC4seC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ+C4guC4tuC5ieC4meC4reC4ouC4ueC5iCAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgRnJvbnRlbmQg4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiC4Lit4LiHIEFkbWluSVRTTUNJUEFsbG9jYXRlIOC5g+C4meC4nuC4t+C5ieC4meC4l+C4teC5iOC4guC4reC4h+C5geC4reC4lOC4oeC4tOC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4reC4reC4muC5gOC4iOC4geC4leC5jOC4guC4reC4h0FnZW50SVRTTVNMQSAg4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC5guC4oeC4lOC4ueC4pSBGcm9udGVuZCDguKrguLPguKvguKPguLHguJrguK3guK3guJrguYDguIjguIHguJXguYzguILguK3guIdBZ2VudElUU01TTEFQcmludCDguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgRnJvbnRlbmQg4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmM4LiC4Lit4LiHQWdlbnRJVFNNU0xBWm9vbSAg4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4reC4reC4muC5gOC4iOC4geC4leC5jOC4guC4reC4h0FnZW50SVRTTVNlcnZpY2Ug4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgRnJvbnRlbmQg4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmM4LiC4Lit4LiHQWdlbnRJVFNNU2VydmljZVByaW50IOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgRnJvbnRlbmQg4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmM4LiC4Lit4LiHQWdlbnRJVFNNU2VydmljZVpvb20g4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfguKPguKfguKHguJbguLbguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKPguKXguLPguJTguLHguJrguITguKfguLLguKHguKrguLPguITguLHguI3guILguK3guIfguYDguKHguJfguKPguLTguIHguIvguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ+C5guC4oeC4lOC4ueC4peC4l+C4teC5iOC4iOC4sOC5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC4geC4suC4o+C4geC4peC4seC4muC5g+C4meC5gOC4oeC4meC4uSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfguYLguKHguJTguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLTguIfguITguYzguIHguLLguKPguIHguKXguLHguJrguYPguJnguYDguKHguJnguLnguIHguLLguKPguJrguKPguLTguIHguLLguKMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfguYLguKHguJTguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLTguIfguITguYzguJfguLXguYjguYDguIrguLfguYjguK3guKHguJXguYjguK3guYPguJnguYDguKHguJnguLnguIHguLLguKPguJrguKPguLTguIHguLLguKMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfguYLguKHguJTguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLTguIfguITguYzguIHguLLguKPguJ7guLTguKHguJ7guYzguYPguJnguYDguKHguJnguLlTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn4LmC4Lih4LiU4Li54Lil4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LiB4Liy4Lij4Lie4Li04Lih4Lie4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfguJ7guLLguKPguLLguKHguLTguYDguJXguK3guKPguYzguKrguLPguKvguKPguLHguJrguKrguJbguLLguJnguKDguLLguJ7guILguK3guIfguYDguKvguJXguIHguLLguKPguJPguYzguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguJXguLHguYnguIfguITguYjguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ+C4quC5iOC4p+C4meC4q+C4meC4tuC5iOC4h+C4guC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+C5gOC4geC4teC5iOC4ouC4p+C4guC5ieC4reC4h+C4geC4seC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfguIjguLPguYDguJvguYfguJnguKrguLPguKvguKPguLHguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAn4Lig4Liy4Lie4Lij4Lin4Lih4LiC4Lit4LiHU0xBICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn4Lig4Liy4Lie4Lij4Lin4Lih4LiC4Lit4LiH4LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn4Lie4Li34LmJ4LiZ4LiX4Li14LmI4LiB4Liy4Lij4LmD4Lir4LmJ4Lia4Lij4Li04LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMXCdJVFNNQ2hhbmdlXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwn4LiV4Lix4LmL4LinXCcg4Lit4Li34LmI4LiZIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdQYXJlbnRDaGlsZFwnICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0ZBUVwnIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyAg4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMIFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwn4LiV4Lix4LmL4LinXCcg4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMIFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguJXguLHguYvguKdcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ+C4leC4seC5i+C4p1wnIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ1JlbGV2YW50VG9cJyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Lit4Li34LmI4LiZ4LmG4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMIFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguK3guLfguYjguJnguYbguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdDb25uZWN0ZWRUb1wnICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4reC4t+C5iOC4meC5huC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguK3guLfguYjguJnguYbguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdJbmNsdWRlc1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4reC4t+C5iOC4meC5huC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNV29ya09yZGVyXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNV29ya09yZGVyXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Xb3JrT3JkZXJcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Xb3JrT3JkZXJcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTVdvcmtPcmRlclwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ+C4leC4seC5i+C4p1wnIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdQYXJlbnRDaGlsZFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwn4LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4LijXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnRkFRXCcg4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4Lil4Li04LiH4LiE4LmMIFwnQWx0ZXJuYXRpdmVUb1wnIOC4luC5ieC4suC4iuC4t+C5iOC4reC5geC4q+C4peC5iOC4h+C4l+C4teC5iOC4oeC4suC5geC4peC4sOC4iuC4t+C5iOC4reC5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4oeC4teC4hOC5iOC4suC5gOC4lOC4teC4ouC4p+C4geC4seC4mQrguKXguLTguIfguITguYzguJfguLXguYjguKrguYjguIfguJzguKXguYPguKvguYnguITguLfguK3guYTguKHguYjguKHguLXguJfguLTguKjguJfguLLguIcg4LmB4LiV4LmI4LiW4LmJ4Liy4Lir4Liy4LiB4Lih4Li14LiE4LmI4Liy4LiV4LmI4Liy4LiH4LiB4Lix4LiZIOC4peC4tOC4h+C4hOC5jOC4l+C4teC5iOC5gOC4geC4tOC4lOC4hOC4t+C4reC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4l+C4tOC4qOC4l+C4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4Lil4Li04LiH4LiE4LmMIFwnQ29ubmVjdGVkVG9cJyDguJbguYnguLLguIrguLfguYjguK3guYHguKvguKXguYjguIfguJfguLXguYjguKHguLLguYHguKXguLDguIrguLfguYjguK3guYDguJvguYnguLLguKvguKHguLLguKLguKHguLXguITguYjguLLguYDguJTguLXguKLguKfguIHguLHguJkg4Lil4Li04LiH4LiE4LmM4LiX4Li14LmI4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LiE4Li34Lit4LmE4Lih4LmI4Lih4Li14LiX4Li04Lio4LiX4Liy4LiHIOC5geC4leC5iOC4luC5ieC4suC4q+C4suC4geC4oeC4teC4hOC5iOC4suC4leC5iOC4suC4h+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguYDguIHguLTguJTguITguLfguK3guIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguJfguLTguKjguJfguLLguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguJvguKPguLDguYDguKDguJfguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyDguJbguYnguLLguIrguLfguYjguK3guYHguKvguKXguYjguIfguJfguLXguYjguKHguLLguYHguKXguLDguIrguLfguYjguK3guYDguJvguYnguLLguKvguKHguLLguKLguKHguLXguITguYjguLLguYDguJTguLXguKLguKfguIHguLHguJkg4Lil4Li04LiH4LiE4LmM4LiX4Li14LmI4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LiE4Li34Lit4LmE4Lih4LmI4Lih4Li14LiX4Li04Lio4LiX4Liy4LiHIOC5geC4leC5iOC4luC5ieC4suC4q+C4suC4geC4oeC4teC4hOC5iOC4suC4leC5iOC4suC4h+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguYDguIHguLTguJTguITguLfguK3guIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguJfguLTguKjguJfguLLguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4m+C4o+C4sOC5gOC4oOC4l+C4peC4tOC4h+C4hOC5jCAgXCdJbmNsdWRlc1wnIOC4luC5ieC4suC4iuC4t+C5iOC4reC5geC4q+C4peC5iOC4h+C4l+C4teC5iOC4oeC4suC5geC4peC4sOC4iuC4t+C5iOC4reC5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4oeC4teC4hOC5iOC4suC5gOC4lOC4teC4ouC4p+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguKrguYjguIfguJzguKXguYPguKvguYnguITguLfguK3guYTguKHguYjguKHguLXguJfguLTguKjguJfguLLguIcg4LmB4LiV4LmI4LiW4LmJ4Liy4Lir4Liy4LiB4Lih4Li14LiE4LmI4Liy4LiV4LmI4Liy4LiH4LiB4Lix4LiZIOC4peC4tOC4h+C4hOC5jOC4l+C4teC5iOC5gOC4geC4tOC4lOC4hOC4t+C4reC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4l+C4tOC4qOC4l+C4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguJvguKPguLDguYDguKDguJfguKXguLTguIfguITguYwgXCdSZWxldmFudFRvXCcg4LiW4LmJ4Liy4LiK4Li34LmI4Lit4LmB4Lir4Lil4LmI4LiH4LiX4Li14LmI4Lih4Liy4LmB4Lil4Liw4LiK4Li34LmI4Lit4LmA4Lib4LmJ4Liy4Lir4Lih4Liy4Lii4Lih4Li14LiE4LmI4Liy4LmA4LiU4Li14Lii4Lin4LiB4Lix4LiZIOC4peC4tOC4h+C4hOC5jOC4l+C4teC5iOC4quC5iOC4h+C4nOC4peC5g+C4q+C5ieC4hOC4t+C4reC5hOC4oeC5iOC4oeC4teC4l+C4tOC4qOC4l+C4suC4hyDguYHguJXguYjguJbguYnguLLguKvguLLguIHguKHguLXguITguYjguLLguJXguYjguLLguIfguIHguLHguJkg4Lil4Li04LiH4LiE4LmM4LiX4Li14LmI4LmA4LiB4Li04LiU4LiE4Li34Lit4LiB4Liy4Lij4LmA4LiK4Li34LmI4Lit4Lih4LmC4Lii4LiH4LiX4Li04Lio4LiX4Liy4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ+C4hOC4p+C4suC4oeC4geC4p+C5ieC4suC4h+C4guC4reC4h+C4nuC4t+C5ieC4meC4l+C4teC5iOC4guC5ieC4reC4hOC4p+C4suC4oeC4guC4reC4hyBJVFNNJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfQ05fSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfntKfmgKXluqYg4oaUIOW9seWTjSDihpQg5LyY5YWI57qnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICfnrqHnkIYi57Sn5oCl5bqmIOKGlCDlvbHlk40i57uE5ZCI55qE5LyY5YWI57qn57uT5p6c44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfkvJjlhYjnuqfliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfmlYXpmpzpl7TmnIDnn63ml7bpl7QnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfntKfmgKXluqYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfkuIrmrKHkv67mlLnkuo4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5LiK5qyh5L+u5pS55Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICflhbPogZTnmoTmnI3liqEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn5pyN5Yqh5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICflvZPliY3mlYXpmpznirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn5YWz6IGU55qEU0xBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn5b2x5ZONJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAn5rKh5pyJ5oyH5a6aU0xBIElE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfmlbDmja7lupPkuK3mib7kuI3liLBTTEFJRCAlc++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAn6buY6K6k5pel5Y6GJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICfmsqHmnInmjIflrppTZXJ2aWNlSUTCoO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ+aVsOaNruW6k+S4reaJvuS4jeWIsFNlcnZpY2VJRCAlc++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeKtuaAgSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfmraPluLgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfmlYXpmpwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+acgOe7iOeUqOaIt+acjeWKoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfliY3nq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICflkI7nq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lU566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+aKpeWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU6L+Q6JClJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfmvJTnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+mhueebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfmlK/mjIHlkIjlkIwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICflhbblroMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn5Y+v55So5oCnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICflk43lupTml7bpl7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+aBouWkjeaXtumXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfop6PlhrPnjocnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn5Lqk5piTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+mUmeivryc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5pu/5LujJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICflhbzlhbcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn6L+e5o6l5YiwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICflrprkuYnpk77mjqXlr7nosaHlsI/pg6jku7YoTGlua09iamVjdDo6Vmlld01vZGUgPSBcImNvbXBsZXhcIinorr7nva7mjInpkq7kuK3nmoTmk43kvZzjgILor7fms6jmhI/vvIzov5nkupvmk43kvZzlv4Xpobvlt7Lnu4/lnKjku6XkuItKU+WSjENTU+aWh+S7tuS4reazqOWGjO+8mkNvcmUuQWxsb2NhdGlvbkxpc3QuY3Nz44CBQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qc+OAgSBDb3JlLlVJLlRhYmxlLlNvcnQuanPjgIFDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qc+WSjENvcmUuQWdlbnQuTGlua09iamVjdC5qc+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn5a6a5LmJ6ZO+5o6l55qE5pyN5Yqh5bCP6YOo5Lu2KExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKeimgeaYvuekuueahOWIl+OAguazqOaEj++8muWPquacieacjeWKoeWxnuaAp+aJjeiDveS9nOS4uum7mOiupOWIl++8jOWPr+eUqOeahOiuvue9ruWAvOS4uu+8mjAgPSDnpoHnlKjvvIwxID0g5Y+v55So77yMIDIgPSDpu5jorqTlkK/nlKjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ+S+nei1lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ+S4uuezu+e7n+euoeeQhuWMuuS4reeahCBBZG1pbklUU01DSVBBbGxvY2F0ZSDphY3nva7ms6jlhozliY3nq6/mqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+S4uuacjeWKoeS6uuWRmOeVjOmdouS4reeahCBBZ2VudElUU01TTEEg5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+S4uuacjeWKoeS6uuWRmOeVjOmdouS4reeahCBBZ2VudElUU01TTEFQcmludCDlr7nosaHms6jlhozliY3nq6/mqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU0xBWm9vbSDlr7nosaHms6jlhozliY3nq6/mqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU2VydmljZSDlr7nosaHms6jlhozliY3nq6/mqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+S4uuacjeWKoeS6uuWRmOeVjOmdouS4reeahCBBZ2VudElUU01TZXJ2aWNlUHJpbnQg5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+S4uuacjeWKoeS6uuWRmOeVjOmdouS4reeahCBBZ2VudElUU01TZXJ2aWNlWm9vbSDlr7nosaHms6jlhozliY3nq6/mqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnSVRTTSBTTEHmpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ0lUU03mnI3liqHmpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ+aVhemanOeKtuaAgeexu+Weiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlLid9ID0gJ+aVhemanOeKtuaAgeexu+Wei+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ+WMheaLrCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+euoeeQhuS8mOWFiOe6p+efqemYteOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnU0xB6I+c5Y2V5Lit5pi+56S64oCc5ZCO6YCA4oCd6I+c5Y2V6aG555qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn5pyN5Yqh6I+c5Y2V5Lit5pi+56S64oCc5ZCO6YCA4oCd6I+c5Y2V6aG555qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn5pyN5Yqh6I+c5Y2V5Lit5pi+56S64oCc6ZO+5o6l4oCd6I+c5Y2V6aG555qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnU0xB6I+c5Y2V5Lit5pi+56S64oCc5omT5Y2w4oCd6I+c5Y2V6aG555qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ+acjeWKoeiPnOWNleS4reaYvuekuuKAnOaJk+WNsOKAneiPnOWNlemhueeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn6YCJ6aG56KeG5Zu+5Lit55So5LqO6KGo56S65pWF6Zqc54q25oCB55qE5Y+C5pWw44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICflsZ7kuo4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICflhbPogZQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn6KKrLi4u6ZyA6KaBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQeamguiniCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnU0xB5omT5Y2w44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ1NMQeivpuaDheOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn5pyN5Yqh5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAn5pyN5Yqh5omT5Y2w44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICfmnI3liqHor6bmg4XjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn5pyN5Yqh5Yy6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ+iuvue9rumTvuaOpeeahOexu+Wei+WSjOaWueWQkeS7peS+v+iuoeeul+aVhemanOeKtuaAgeOAgumUruaYr+mTvuaOpeexu+Wei+eahOWQjeensO+8iOWcqExpbmtPYmplY3Q6OlR5cGXkuK3lrprkuYnvvInvvIzlgLzmmK9JbmNpZGVudExpbmtUeXBl77yI5pWF6Zqc6ZO+5o6l57G75Z6L77yJ55qE5pa55ZCR5Lul6K6h566X5pWF6Zqc54q25oCB44CC56S65L6L77ya5aaC5p6cSW5jaWRlbnRMaW5rVHlwZe+8iOaVhemanOmTvuaOpeexu+Wei++8ieiuvuS4uuKAnERlcGVuZHNPbu+8iOS+nei1lu+8ieKAne+8jOaWueWQkeaYr1NvdXJjZe+8iOa6kO+8ie+8jOWPquacieKAnOS+nei1luKAnemTvuaOpe+8iOiAjOS4jeaYr+mTvuaOpeexu+Wei+S4uuKAnOiiqy4uLumcgOimgeKAneeahOmTvuaOpe+8ieaJjeeUqOadpeiuoeeul+aVhemanOeKtuaAgeOAguWPr+S7peagueaNrumcgOimgea3u+WKoOabtOWkmueahOmTvuaOpeexu+Wei+WSjOaWueWQke+8jOWmguaWueWQkeS4uuKAnOebruagh+KAneeahOKAnEluY2x1ZGVz77yI5YyF5ZCr77yJ4oCd6ZO+5o6l44CC5omA5pyJ5Zyo57O757uf6YWN572u6YCJ6aG555qETGlua09iamVjdDo6VHlwZeS4reWumuS5ieeahOmTvuaOpeexu+Wei+mDveWPr+S7peS9v+eUqO+8jOaWueWQkeWPquWPr+S7peaYr+KAnFNvdXJjZe+8iOa6kO+8ieKAneOAgeKAnFRhcmdldO+8iOebruagh++8ieKAneaIluKAnEJvdGjvvIjmupDlkoznm67moIfpg73mmK/vvInigJ3jgILph43opoHvvJrlnKjmm7TmlLnkuobns7vnu5/phY3nva7pgInpobnlkI7vvIzkvaDpnIDopoHov5DooYzohJrmnKxiaW4vb3Rycy5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0Ze+8jOaJjeiDveaMieaWsOeahOiuvue9rumHjeaWsOiuoeeul+aVhemanOeKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5Liq4oCcSVRTTUNoYW5nZe+8iOWPmOabtO+8ieKAneWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOaZrumAmuKAnemTvuaOpeWIsOW3peWNleOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5pmu6YCa4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOeItuWtkOKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWFs+iBlOKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlpIfpgInigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzkvp3otZbigJ3pk77mjqXliLDigJzmnI3liqHigJ3jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5YWz6IGU4oCd6ZO+5o6l5Yiw4oCc5pyN5Yqh4oCd44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5aSH6YCJ4oCd6ZO+5o6l5Yiw4oCc5pyN5Yqh4oCd44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzkvp3otZbigJ3pk77mjqXliLDigJzmnI3liqHigJ3jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlhbPogZTigJ3pk77mjqXliLDlt6XljZXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWkh+mAieKAnemTvuaOpeWIsOWPpuS4gOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOi/nuaOpeWIsOKAnemTvuaOpeWIsOWPpuS4gOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzkvp3otZbigJ3pk77mjqXliLDlj6bkuIDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzljIXlkKvigJ3pk77mjqXliLDlj6bkuIDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWFs+iBlOKAnemTvuaOpeWIsOWPpuS4gOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNV29ya09yZGVy77yI5bel5L2c5oyH5Luk77yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5L6d6LWW4oCd6ZO+5o6l5Yiw6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Xb3JrT3JkZXLvvIjlt6XkvZzmjIfku6TvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzmma7pgJrigJ3pk77mjqXliLDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNV29ya09yZGVy77yI5bel5L2c5oyH5Luk77yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5L6d6LWW4oCd6ZO+5o6l5Yiw4oCc5pyN5Yqh4oCd44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTVdvcmtPcmRlcu+8iOW3peS9nOaMh+S7pO+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOaZrumAmuKAnemTvuaOpeWIsOKAnOacjeWKoeKAneOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTVdvcmtPcmRlcu+8iOW3peS9nOaMh+S7pO+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOaZrumAmuKAnemTvuaOpeWIsOW3peWNleOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5Liq4oCc5pyN5Yqh4oCd5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5pmu6YCa4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4quKAnOacjeWKoeKAneWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOeItuWtkOKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4quKAnOacjeWKoeKAneWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWFs+iBlOKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobpk77mjqXnsbvlnovigJzmm7/ku6PigJ3jgILlpoLmnpzmupDlkoznm67moIflkI3np7Dnm7jlkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/ml6DmlrnlkJHmgKfnmoTpk77mjqXjgILlpoLmnpzmupDlkoznm67moIfnmoTlgLzkuI3lkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/mlrnlkJHmgKfnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6humTvuaOpeexu+Wei+KAnOi/nuaOpeWIsOKAneOAguWmguaenOa6kOWSjOebruagh+WQjeensOebuOWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aXoOaWueWQkeaAp+eahOmTvuaOpeOAguWmguaenOa6kOWSjOebruagh+eahOWAvOS4jeWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aWueWQkeaAp+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6humTvuaOpeexu+Wei+KAnOS+nei1luKAneOAguWmguaenOa6kOWSjOebruagh+WQjeensOebuOWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aXoOaWueWQkeaAp+eahOmTvuaOpeOAguWmguaenOa6kOWSjOebruagh+eahOWAvOS4jeWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aWueWQkeaAp+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG6ZO+5o6l57G75Z6L4oCc5YyF5ZCr4oCd44CC5aaC5p6c5rqQ5ZKM55uu5qCH5ZCN56ew55u45ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5peg5pa55ZCR5oCn55qE6ZO+5o6l44CC5aaC5p6c5rqQ5ZKM55uu5qCH55qE5YC85LiN5ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5pa55ZCR5oCn55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6humTvuaOpeexu+Wei+KAnOWFs+iBlOKAneOAguWmguaenOa6kOWSjOebruagh+WQjeensOebuOWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aXoOaWueWQkeaAp+eahOmTvuaOpeOAguWmguaenOa6kOWSjOebruagh+eahOWAvOS4jeWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aWueWQkeaAp+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdJVFNN5qih5Z2X5Lit5paH5pys6L6T5YWl5Yy65Z+f55qE5a695bqm44CCJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfVFdfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICfph43opoEg4oaUIOW9semfvyDihpQg5YSq5YWI57SaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICci6YeN6KaBIOKGlCDlvbHpn78i5LmL6ZaT55qE57WE5ZCI5rG65a6a5YSq5YWI57SaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICflhKrlhYjntJrliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfmlYXpmpzplpPmnIDnn63mmYLplpMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfph43opoEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfkuIrmrKHkv67mlLnmlrwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5LiK5qyh5L+u5pS55Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfpl5zoga/nmoTmnI3li5knOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn5pyN5YuZ5L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfnlbbliY3mlYXpmpzni4DmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn6Zec6IGv55qEU0xBcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9semfvyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn55W25YmN5pWF6Zqc54uA5oWLJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeLgOaFiyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfmraPluLgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfmlYXpmpwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+acgOe1gueUqOaItuacjeWLmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfliY3nq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICflvoznq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lU566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+WgseWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU6YGL54efJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfmvJTnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+mgheebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfkvp3mk5rlkIjlkIwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICflhbblroMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn5Y+v55So5oCnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfpn7/mh4nmmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+aBouW+qeaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfop6PmsbrnjocnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn5Lqk5piTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+mMr+iqpCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5Y+v5L6b6YG45pOHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JvdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn6YCj5o6lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn5L6d6LO0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfljIXmi6wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfnrqHnkIblhKrlhYjntJrnn6npmaMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn5bGs5pa8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn55u46ZecJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ+mcgOimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEHmpoLov7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ+acjeWLmeamgui/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+acjeWLmeWNgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290cnMuQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+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+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIHByaW9yaXR5IGxpc3QKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgICAgICBJVFNNSW1wYWN0ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKCiAgICAjIHNldCB0aGUgaW1wYWN0IGxpc3QKICAgICRTZWxmLT57SW1wYWN0TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUltcGFjdH07CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdAogICAgbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NJUEFsbG9jYXRlJyApIHsKCiAgICAgICAgIyBnZXQgYWxsIFByaW9yaXR5SURzIG9mIHRoZSBtYXRyaXgKICAgICAgICBteSAkQWxsb2NhdGVEYXRhOwogICAgICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRTZWxmLT57SW1wYWN0TGlzdH0gfSApIHsKCiAgICAgICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICggc29ydCBrZXlzICV7ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSB9ICkgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgZmllbGQgbmFtZSBmb3IgcHJpb3JpdHkgaWQKICAgICAgICAgICAgICAgIG15ICRGaWVsZE5hbWUgPSAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0IC4gJy0nIC4gJENyaXRpY2FsaXR5OwoKICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgYWxsIHdoaXRlc3BhY2VzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsbG93ZWQgaW4gSFRNTCBJRC1BdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAkRmllbGROYW1lID1+IHN7IFxzKyB9e31neG1zOwoKICAgICAgICAgICAgICAgICMgZ2V0IGZvcm0gcGFyYW0gZm9yIHByaW9yaXR5IGlkCiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgUGFyYW0gPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICkgfHwgJyc7CgogICAgICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJFByaW9yaXR5SUQ7CgogICAgICAgICAgICAgICAgJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBhbGxvY2F0aW9ucwogICAgICAgICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBhbGxvY2F0aW9uIGRhdGEKICAgICAgICBteSAkQWxsb2NhdGVEYXRhID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRBbGxvY2F0ZU1hdHJpeDsKICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WzBdLT57T2JqZWN0VHlwZX0gPQogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ltcGFjdCcpIC4gJyAvICcKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyaXRpY2FsaXR5Jyk7CiAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlswXS0+e0NsYXNzfSA9ICdIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbic7CgogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKEltcGFjdCkKICAgICAgICBteSAkQ291bnRlcjEgPSAxOwogICAgICAgIGZvciBteSAkSW1wYWN0ICgKICAgICAgICAgICAgc29ydCB7ICRTZWxmLT57SW1wYWN0TGlzdH0tPnskYX0gY21wICRTZWxmLT57SW1wYWN0TGlzdH0tPnskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRTZWxmLT57SW1wYWN0TGlzdH0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RUeXBlfSAgID0gJ0ltcGFjdCc7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRDb3VudGVyMV0tPlswXS0+e0ltcGFjdEtleX0gICAgPSAkSW1wYWN0OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RPcHRpb259ID0gJFNlbGYtPntJbXBhY3RMaXN0fS0+eyRJbXBhY3R9OwogICAgICAgICAgICAkQ291bnRlcjErKzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKENyaXRpY2FsaXR5KQogICAgICAgIG15ICRDb3VudGVyMiA9IDE7CiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskYX0gY21wICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fS0+eyRifSB9CiAgICAgICAgICAgIGtleXMgJXsgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57T2JqZWN0VHlwZX0gICAgID0gJ0NyaXRpY2FsaXR5JzsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57Q3JpdGljYWxpdHlLZXl9ID0gJENyaXRpY2FsaXR5OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntPYmplY3RPcHRpb259ICAgPSAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskQ3JpdGljYWxpdHl9OwogICAgICAgICAgICAkQ291bnRlcjIrKzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgY29udGVudAogICAgICAgIGZvciBteSAkUm93ICggMSAuLiAoICRDb3VudGVyMSAtIDEgKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAxIC4uICggJENvdW50ZXIyIC0gMSApICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBrZXlzCiAgICAgICAgICAgICAgICBteSAkSW1wYWN0S2V5ICAgICAgPSAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WzBdLT57SW1wYWN0S2V5fTsKICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eUtleSA9ICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvbHVtbl0tPntDcml0aWNhbGl0eUtleX07CgogICAgICAgICAgICAgICAgIyBidWlsZCBmaWVsZCBuYW1lIGZvciBwcmlvcml0eSBpZAogICAgICAgICAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICJQcmlvcml0eUlEIiAuICRJbXBhY3RLZXkgLiAnLScgLiAkQ3JpdGljYWxpdHlLZXk7CgogICAgICAgICAgICAgICAgIyBjbGVhbiB1cCBhbGwgd2hpdGVzcGFjZXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZCBpbiBIVE1MIElELUF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICRGaWVsZE5hbWUgPX4gc3sgXHMrIH17fWd4bXM7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgb3B0aW9uIHN0cmluZwogICAgICAgICAgICAgICAgbXkgJE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0S2V5fS0+eyRDcml0aWNhbGl0eUtleX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLT57T3B0aW9uU3RyZ30gPSAkT3B0aW9uU3RyZzsKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntDbGFzc30gICAgICA9ICdDb250ZW50JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRSb3cgKCAwIC4uICQjeyRBbGxvY2F0ZU1hdHJpeH0gKSB7CgogICAgICAgICAgICBpZiAoICRSb3cgIT0gMCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdSb3cnICkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAwIC4uICQjeyAkQWxsb2NhdGVNYXRyaXgtPlskUm93XSB9ICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHJvdyBpcyBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICggJFJvdyA9PSAwICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW4gPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbkNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDb250ZW50Q2VsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DSVBBbGxvY2F0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA1OGJlYmRkMmI2MzdkOTBhNDZhOWFmYjg4MjYwNzNiYTgzMzdlNjExIC0gS2VybmVsL01vZHVsZXMvQWRtaW5TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5TZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwojIC0tLQojIElUU01Db3JlCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKIyAtLS0KCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JyBdLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKIyAtLS0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNlcnZpY2UgZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlcnZpY2VFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJUdldFBhcmFtOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50KSkgewogICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50IFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyAtLS0KICAgICAgICAgICAgJEdldFBhcmFteyRffSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRfICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICBteSAlRXJyb3I7CgogICAgICAgIGlmICggISRHZXRQYXJhbXtOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICcnOwogICAgICAgIGlmICggJEdldFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICAgICAgbXkgJFByZWZpeCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFByZWZpeCkgewogICAgICAgICAgICAgICAgJFNlcnZpY2VOYW1lID0gJFByZWZpeCAuICI6OiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJFNlcnZpY2VOYW1lIC49ICRHZXRQYXJhbXtOYW1lfTsKCiAgICAgICAgaWYgKCBsZW5ndGggJFNlcnZpY2VOYW1lID4gMjAwICkgewogICAgICAgICAgICAkRXJyb3J7J05hbWVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3J7TG9uZ05hbWV9ID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17U2VydmljZUlEfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtTZXJ2aWNlSUR9ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgICAgICMgdXBkYXRlIHByZWZlcmVuY2VzCiAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NlcnZpY2VQcmVmZXJlbmNlcycpIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgICAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlNlcnZpY2VQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG15ICROb3RlOwogICAgICAgICAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSApOwogICAgICAgICAgICAgICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRQYXJhbUl0ZW0tPntOYW1lfSB9ID0gXEBBcnJheTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcmFtICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTm90ZSAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gJE9iamVjdC0+RXJyb3IoKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgd291bGQgbGlrZSB0byBjb250aW51ZSBlZGl0aW5nIHRoZSBzZXJ2aWNlLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkgZXEgJzEnICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1TZXJ2aWNlRWRpdDtTZXJ2aWNlSUQ9JElEIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRFcnJvcntNZXNzYWdlfQogICAgICAgICAgICA/ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJEVycm9ye01lc3NhZ2V9LAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2VydmljZSBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIGlzIGVuYWJsZWQgdG8gdXNlIGl0IGhlcmUKICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICJQbGVhc2UgYWN0aXZhdGUgJXMgZmlyc3QhIiwgIlNlcnZpY2UiICksCiAgICAgICAgICAgICAgICBMaW5rID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZG1pblN5c3RlbUNvbmZpZ3VyYXRpb247U3ViYWN0aW9uPVZpZXc7U2V0dGluZz1UaWNrZXQlM0ElM0FTZXJ2aWNlOycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkFkZCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyJyApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBzZXJ2aWNlcyBkZWZpbmVkLCB0aGV5IGFyZSBzaG93bgogICAgICAgIGlmICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgICAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwoKICAgICAgICAgICAgIyBzb3J0IHRoZSBzZXJ2aWNlIGxpc3QgYnkgbG9uZyBzZXJ2aWNlIG5hbWUKICAgICAgICAgICAgQHskU2VydmljZUxpc3R9ID0gc29ydCB7ICRhLT57TmFtZX0gLiAnOjonIGNtcCAkYi0+e05hbWV9IC4gJzo6JyB9IEB7JFNlcnZpY2VMaXN0fTsKCiAgICAgICAgICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyRTZXJ2aWNlRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICRTZXJ2aWNlRGF0YS0+e1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBhIG5vIGRhdGEgZm91bmQgbXNnIGlzIGRpc3BsYXllZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2VydmljZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CiAgICByZXR1cm47Cn0KCnN1YiBfTWFza05ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgIG15ICVTZXJ2aWNlRGF0YTsKCiAgICAjIGdldCBwYXJhbXMKICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKTsKICAgIGlmICggJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gbmUgJ05FVycgKSB7CiAgICAgICAgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgU2VydmljZUlEICAgPT4gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFNlcnZpY2VOYW1lID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJExpc3RUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpOwoKICAgICMgZ2VuZXJhdGUgUGFyZW50T3B0aW9uU3RyZwogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICAgICAgICA9PiAxLAogICAgICAgIEtlZXBDaGlsZHJlbiA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJykgLy8gMCwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRTZXJ2aWNlRGF0YXtQYXJlbnRPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1BhcmVudElEJywKICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17UGFyZW50SUR9IHx8ICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH0sCiAgICAgICAgUG9zc2libGVOb25lICAgPT4gMSwKICAgICAgICBUcmVlVmlldyAgICAgICA9PiAoICRMaXN0VHlwZSBlcSAndHJlZScgKSA/IDEgOiAwLAogICAgICAgIERpc2FibGVkQnJhbmNoID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICBUcmFuc2xhdGlvbiAgICA9PiAwLAogICAgICAgIENsYXNzICAgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgIyBnZW5lcmF0ZSBUeXBlT3B0aW9uU3RyZwogICAgbXkgJFR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgIyBidWlsZCB0aGUgdHlwZSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe1R5cGVPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJFR5cGVMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VHlwZUlEfSB8fCAkU2VydmljZURhdGF7VHlwZUlEfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSBjcml0aWNhbGl0eSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSwKICAgICAgICBOYW1lICAgICAgID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17Q3JpdGljYWxpdHl9IHx8ICRTZXJ2aWNlRGF0YXtDcml0aWNhbGl0eX0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiMgLS0tCgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkU2VydmljZURhdGF7VmFsaWRPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkU2VydmljZURhdGF7VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgb3V0cHV0IHNlcnZpY2UgZWRpdAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2VydmljZUVkaXQnLAogICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVTZXJ2aWNlRGF0YSwgfSwKICAgICk7CgogICAgIyBzaG93IGVhY2ggcHJlZmVyZW5jZXMgc2V0dGluZwogICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSB9OwogICAgfQogICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTZXJ2aWNlUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICApOwogICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSApOwogICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICVCdWlsZFNlbGVjdGlvblBhcmFtcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSA9IGpvaW4oICcgJywgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSAvLyAnJywgJ01vZGVybml6ZScgKTsKCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAlQnVpbGRTZWxlY3Rpb25QYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBmNDA3ZDQ4NjJhNjBhMTY1NGI2Mzc0YmVhYjQ1YjBkMDFiOGU5ODk2IC0gS2VybmVsL01vZHVsZXMvQWRtaW5TTEEucG0KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblNMQTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRTTEFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwojIC0tLQogICAgbXkgJUVycm9yICAgICAgICA9ICgpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2xhIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTTEFFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBTdWJhY3Rpb24gPT4gJFNlbGYtPntTdWJhY3Rpb259LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzbGEgc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NMQVNhdmUnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgZm9yIG15ICRQYXJhbSAoCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICAgICAgICAgIHF3KFNMQUlEIE5hbWUgQ2FsZW5kYXIgRmlyc3RSZXNwb25zZVRpbWUgRmlyc3RSZXNwb25zZU5vdGlmeSBTb2x1dGlvblRpbWUgU29sdXRpb25Ob3RpZnkgVXBkYXRlVGltZSBVcGRhdGVOb3RpZnkgVmFsaWRJRCBDb21tZW50KQogICAgICAgICAgICBxdyhTTEFJRCBOYW1lIENhbGVuZGFyIEZpcnN0UmVzcG9uc2VUaW1lIEZpcnN0UmVzcG9uc2VOb3RpZnkgU29sdXRpb25UaW1lIFNvbHV0aW9uTm90aWZ5IFVwZGF0ZVRpbWUgVXBkYXRlTm90aWZ5IFZhbGlkSUQgQ29tbWVudCBUeXBlSUQgTWluVGltZUJldHdlZW5JbmNpZGVudHMpCiMgLS0tCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgICAgICVFcnJvciA9ICgpOwogICAgICAgIGlmICggISRHZXRQYXJhbXtOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgIyBnZXQgc2VydmljZSBpZHMKICAgICAgICAgICAgbXkgQFNlcnZpY2VJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnU2VydmljZUlEcycgKTsKICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwoKICAgICAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYSBuZXcgc2xhCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U0xBSUR9ID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgc2xhCiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkTG9nT2JqZWN0LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgIG15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgICAgIFNMQUlEICA9PiAkR2V0UGFyYW17U0xBSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NMQVByZWZlcmVuY2VzJykgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U0xBUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkTm90ZTsKICAgICAgICAgICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIFNMQURhdGEgPT4gXCVTTEFEYXRhICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBAQXJyYXkgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1JdGVtLT57TmFtZX0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFBhcmFtSXRlbS0+e05hbWV9IH0gPSBcQEFycmF5OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFEYXRhICA9PiBcJVNMQURhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5vdGUgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgU0xBLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkgZXEgJzEnICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U0xBRWRpdDtTTEFJRD0kR2V0UGFyYW17U0xBSUR9IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJEVycm9ye01lc3NhZ2V9CiAgICAgICAgICAgID8gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICBJbmZvICAgICA9PiAkRXJyb3J7TWVzc2FnZX0sCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAnJzsKCiAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrTmV3KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJUVycm9yLAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzbGEgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBpcyBlbmFibGVkIHRvIHVzZSBpdCBoZXJlCiAgICAgICAgaWYgKCAhJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAiUGxlYXNlIGFjdGl2YXRlICVzIGZpcnN0ISIsICJTZXJ2aWNlIiApLAogICAgICAgICAgICAgICAgTGluayA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXN0ZW1Db25maWd1cmF0aW9uO1N1YmFjdGlvbj1WaWV3O1NldHRpbmc9VGlja2V0JTNBJTNBU2VydmljZTsnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdGaWx0ZXInICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgICAgICMgZ2V0IHNsYSBsaXN0CiAgICAgICAgbXkgJVNMQUxpc3QgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgU0xBJ3MgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAgICAgU0xBSUQ6CiAgICAgICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IHsgbGMgJFNMQUxpc3R7JGF9IGNtcCBsYyAkU0xBTGlzdHskYn0gfSBrZXlzICVTTEFMaXN0ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzbGEgZGF0YQogICAgICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHRoZSBzZXJ2aWNlIGxpc3QKICAgICAgICAgICAgICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICgKICAgICAgICAgICAgICAgICAgICBzb3J0IHsgbGMgJFNlcnZpY2VMaXN0eyRhfSBjbXAgbGMgJFNlcnZpY2VMaXN0eyRifSB9CiAgICAgICAgICAgICAgICAgICAgQHsgJFNMQURhdGF7U2VydmljZUlEc30gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IHx8ICctJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBsaXN0IHJvdwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VMaXN0WzBdIHx8ICctJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJFNMQURhdGF7VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IFNMQUlEIGlmIHNjYWxhciBAU2VydmljZUxpc3QgPD0gMTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB0aGUgZmlyc3Qgc2VydmljZSBpZAogICAgICAgICAgICAgICAgc2hpZnQgQFNlcnZpY2VMaXN0OwoKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZU5hbWUgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBsaXN0IHJvdwogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtc2cgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TTEEnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX01hc2tOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlU0xBRGF0YTsKICAgICRTTEFEYXRhe1NMQUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTTEFJRCcgKSB8fCAnJzsKCiAgICBpZiAoICRTTEFEYXRhe1NMQUlEfSApIHsKCiAgICAgICAgIyBnZXQgc2xhIGRhdGEKICAgICAgICAlU0xBRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQURhdGF7U0xBSUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU0xBRGF0YXtTZXJ2aWNlSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKTsKICAgIH0KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRMaXN0VHlwZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKTsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICAgICAgICA9PiAxLAogICAgICAgIEtlZXBDaGlsZHJlbiA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJykgLy8gMCwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2VuZXJhdGUgU2VydmljZU9wdGlvblN0cmcKICAgICRQYXJhbXtTZXJ2aWNlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICdTZXJ2aWNlSURzJywKICAgICAgICBTZWxlY3RlZElEICA9PiAkU0xBRGF0YXtTZXJ2aWNlSURzfSB8fCBbXSwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgID0+IDUsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBUcmVlVmlldyAgICA9PiAoICRMaXN0VHlwZSBlcSAndHJlZScgKSA/IDEgOiAwLAogICAgICAgIE1heCAgICAgICAgID0+IDIwMCwKICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAjIGdlbmVyYXRlIFR5cGVPcHRpb25TdHJnCiAgICAgICAgbXkgJFR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICAgICApOwogICAgICAgICRQYXJhbXtUeXBlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkVHlwZUxpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFNMQURhdGF7VHlwZUlEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwojIC0tLQoKICAgICMgZ2VuZXJhdGUgQ2FsZW5kYXJPcHRpb25TdHJnCiAgICBteSAlQ2FsZW5kYXJMaXN0OwoKICAgIG15ICRNYXhpbXVtID0gJENvbmZpZ09iamVjdC0+R2V0KCJNYXhpbXVtQ2FsZW5kYXJOdW1iZXIiKSB8fCA1MDsKCiAgICBmb3IgbXkgJENhbGVuZGFyTnVtYmVyICggJycsIDEgLi4gJE1heGltdW0gKSB7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpbWVWYWNhdGlvbkRheXM6OkNhbGVuZGFyJENhbGVuZGFyTnVtYmVyIikgKSB7CiAgICAgICAgICAgICRDYWxlbmRhckxpc3R7JENhbGVuZGFyTnVtYmVyfSA9ICJDYWxlbmRhciAkQ2FsZW5kYXJOdW1iZXIgLSAiCiAgICAgICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkQ2FsZW5kYXJOdW1iZXIgLiAiTmFtZSIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU0xBRGF0YXtDYWxlbmRhck9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlQ2FsZW5kYXJMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2FsZW5kYXInLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17Q2FsZW5kYXJ9IHx8ICRTTEFEYXRhe0NhbGVuZGFyfSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgbXkgJU5vdGlmeUxldmVsTGlzdCA9ICgKICAgICAgICAxMCA9PiAnMTAlJywKICAgICAgICAyMCA9PiAnMjAlJywKICAgICAgICAzMCA9PiAnMzAlJywKICAgICAgICA0MCA9PiAnNDAlJywKICAgICAgICA1MCA9PiAnNTAlJywKICAgICAgICA2MCA9PiAnNjAlJywKICAgICAgICA3MCA9PiAnNzAlJywKICAgICAgICA4MCA9PiAnODAlJywKICAgICAgICA5MCA9PiAnOTAlJywKICAgICk7CiAgICAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlTm90aWZ5T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVOb3RpZnlMZXZlbExpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdGaXJzdFJlc3BvbnNlTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9IHx8ICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VOb3RpZnl9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgKTsKICAgICRTTEFEYXRhe1VwZGF0ZU5vdGlmeU9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVXBkYXRlTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1VwZGF0ZU5vdGlmeX0gfHwgJFNMQURhdGF7VXBkYXRlTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CiAgICAkU0xBRGF0YXtTb2x1dGlvbk5vdGlmeU9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnU29sdXRpb25Ob3RpZnknLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U29sdXRpb25Ob3RpZnl9IHx8ICRTTEFEYXRhe1NvbHV0aW9uTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkU0xBRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtWYWxpZElEfSB8fCAkU0xBRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBvdXRwdXQgc2xhIGVkaXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgU0xBSUQgICAgID0+ICRTTEFEYXRhe1NMQUlEfSwKICAgICAgICAgICAgU0xBTmFtZSAgID0+ICRTTEFEYXRhe05hbWV9LAogICAgICAgICAgICBTdWJhY3Rpb24gPT4gJFBhcmFte1N1YmFjdGlvbn0sCiAgICAgICAgICAgICVQYXJhbQogICAgICAgIH0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NMQUVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVTTEFEYXRhLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvd3MgaGVhZGVyCiAgICBpZiAoICRTTEFEYXRhe1NMQUlEfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyRWRpdCcgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJBZGQnICk7CiAgICB9CgogICAgIyBzaG93IGVhY2ggcHJlZmVyZW5jZXMgc2V0dGluZwogICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NMQVByZWZlcmVuY2VzJykgfTsKICAgIH0KICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U0xBUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICApOwogICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU0xBRGF0YSA9PiBcJVNMQURhdGEgKTsKICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBSXRlbScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgcmVmKCAkUGFyYW1JdGVtLT57RGF0YX0gKSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgICAgICB8fCByZWYoICRQcmVmZXJlbmNlc3skSXRlbX0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAlQnVpbGRTZWxlY3Rpb25QYXJhbXMgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRQcmVmZXJlbmNlc3skSXRlbX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskUGFyYW1JdGVtfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRCdWlsZFNlbGVjdGlvblBhcmFtc3tDbGFzc30gPSBqb2luKCAnICcsICRCdWlsZFNlbGVjdGlvblBhcmFtc3tDbGFzc30gLy8gJycsICdNb2Rlcm5pemUnICk7CgogICAgICAgICAgICAgICAgICAgICRQYXJhbUl0ZW0tPnsnT3B0aW9uJ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJUJ1aWxkU2VsZWN0aW9uUGFyYW1zLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRQYXJhbUl0ZW0tPntCbG9ja30gfHwgJFByZWZlcmVuY2VzeyRJdGVtfS0+e0Jsb2NrfSB8fCAnT3B0aW9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG91dHB1dCBiYWNrCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TTEEnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBnZXQgc2VydmljZSBsaXN0CiAgICBteSAkU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgKTsKCiAgICBpZiAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgIyBzb3J0IHRoZSBzZXJ2aWNlIGxpc3QgYnkgbG9uZyBzZXJ2aWNlIG5hbWUKICAgICAgICBAeyRTZXJ2aWNlTGlzdH0gPSBzb3J0IHsgJGEtPntOYW1lfSAuICc6OicgY21wICRiLT57TmFtZX0gLiAnOjonIH0gQHskU2VydmljZUxpc3R9OwoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskU2VydmljZURhdGF9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJFNlcnZpY2VEYXRhLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNlRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkU2VydmljZURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlICAgPT4gJ092ZXJ2aWV3JywKICAgICAgICBSZWZyZXNoID0+ICRSZWZyZXNoLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICRTZXJ2aWNlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZXJ2aWNlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gU2VydmljZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICk7CiAgICBpZiAoICEkU2VydmljZXtTZXJ2aWNlSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRTZXJ2aWNlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2xhIGxpc3QKICAgIG15ICVTTEFMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXtTZXJ2aWNlSUR9LAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjcmVhdGUgYnkpCiAgICAkU2VydmljZXtDcmVhdGVCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDcmVhdGVCeX0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgZGF0YSAoY2hhbmdlIGJ5KQogICAgJFNlcnZpY2V7Q2hhbmdlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNlcnZpY2V7Q2hhbmdlQnl9LAogICAgKTsKCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgZ2VuZXJhdGUgcGRmIG91dHB1dAogICAgbXkgJVBhZ2U7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICRQYWdle01heFBhZ2VzfSA9ICRDb25maWdPYmplY3QtPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgaWYgKCAhJFBhZ2V7TWF4UGFnZXN9IHx8ICRQYWdle01heFBhZ2VzfSA8IDEgfHwgJFBhZ2V7TWF4UGFnZXN9ID4gMTAwMCApIHsKICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAxMDA7CiAgICB9CiAgICAkUGFnZXtNYXJnaW5Ub3B9ICAgID0gMzA7CiAgICAkUGFnZXtNYXJnaW5SaWdodH0gID0gNDA7CiAgICAkUGFnZXtNYXJnaW5Cb3R0b219ID0gNDA7CiAgICAkUGFnZXtNYXJnaW5MZWZ0fSAgID0gNDA7CiAgICAkUGFnZXtIZWFkZXJSaWdodH0gID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTZXJ2aWNlJyk7CiAgICAkUGFnZXtQYWdlVGV4dH0gICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQYWdlJyk7CiAgICAkUGFnZXtQYWdlQ291bnR9ICAgID0gMTsKCiAgICAjIGNyZWF0ZSBuZXcgcGRmIGRvY3VtZW50CiAgICAkUERGT2JqZWN0LT5Eb2N1bWVudE5ldygKICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFNlcnZpY2V7TmFtZVNob3J0fSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlyc3QgcGRmIHBhZ2UKICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgJVBhZ2UsCiAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICk7CiAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgdGl0bGUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlcnZpY2V7TmFtZVNob3J0fSwKICAgICAgICBGb250U2l6ZSA9PiAxMywKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdwcmludGVkIGJ5JykgLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGdWxsbmFtZX0gLiAnICcKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57VGltZX0sCiAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTQsCiAgICApOwoKICAgICMgb3V0cHV0IGdlbmVyYWwgaW5mb3MKICAgICRTZWxmLT5fUERGT3V0cHV0R2VuZXJhbEluZm9zKAogICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgIFNlcnZpY2UgPT4gXCVTZXJ2aWNlLAogICAgKTsKCiAgICAjIG91dHB1dCBhc3NvY2lhdGVkIHNsYXMKICAgIGlmICglU0xBTGlzdCkgewogICAgICAgICRTZWxmLT5fUERGT3V0cHV0QXNzb2NpYXRlZFNMQXMoCiAgICAgICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgICAgICBTTEFMaXN0ID0+IFwlU0xBTGlzdCwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGRldGFpbGVkIGluZm9zCiAgICAkU2VsZi0+X1BERk91dHB1dERldGFpbGVkSW5mb3MoCiAgICAgICAgUGFnZSAgICA9PiBcJVBhZ2UsCiAgICAgICAgU2VydmljZSA9PiBcJVNlcnZpY2UsCiAgICApOwoKICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgbXkgJEZpbGVuYW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZW5hbWVDbGVhblVwKAogICAgICAgIEZpbGVuYW1lID0+ICRTZXJ2aWNle05hbWVTaG9ydH0sCiAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgKTsKCiAgICAjIGdldCBkYXRldGltZSBvYmplY3QKICAgIG15ICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIEZpbGVuYW1lICAgID0+ICJzZXJ2aWNlXyR7RmlsZW5hbWV9XyIgLiAkRGF0ZVRpbWVPYmplY3QtPkZvcm1hdCggRm9ybWF0ID0+ICclWS0lbS0lZF8lSDolTScgKSAuICcucGRmJywKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKc3ViIF9QREZPdXRwdXRHZW5lcmFsSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTZXJ2aWNlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTZXJ2aWNlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTZXJ2aWNlfS0+e05hbWVTaG9ydH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3VycmVudCBJbmNpZGVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntDdXJJbmNpU3RhdGV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JlYXRlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTZXJ2aWNlfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYXN0IGNoYW5nZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U2VydmljZX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgXTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSAxNzAuNTsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVszXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzRde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAleyAkUGFyYW17UGFnZX0gfSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhcmFte1BhZ2V9LT57UGFnZVRleHR9IC4gJyAnIC4gJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fQogICAgICAgICk7CiAgICAgICAgJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSsrOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dERldGFpbGVkSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTZXJ2aWNlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VydmljZScpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgY3JlYXRlIHRhYmxlCiAgICBteSAkVGFibGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NlcnZpY2UnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVHlwZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTZXJ2aWNlfS0+e1R5cGV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JpdGljYWxpdHknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U2VydmljZX0tPntDcml0aWNhbGl0eX0gKSwKICAgICAgICB9LAogICAgXTsKICAgIG15ICVUYWJsZVBhcmFtOwogICAgbXkgJFJvd3MgPSBAeyRUYWJsZX07CiAgICBmb3IgbXkgJFJvdyAoIDEgLi4gJFJvd3MgKSB7CiAgICAgICAgJFJvdy0tOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJFRhYmxlLT5bJFJvd10tPntWYWx1ZX07CiAgICB9CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDQzMTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ICAgICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0QXNzb2NpYXRlZFNMQXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEFMaXN0KSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93ID0gMDsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2VuZXJhdGUgdGFibGUgZGF0YQogICAgZm9yIG15ICRTTEFJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17U0xBTGlzdH0gfSApIHsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpIC4gJzonOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkUGFyYW17U0xBTGlzdH0tPnskU0xBSUR9OwogICAgICAgICRSb3crKzsKICAgIH0KICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdBc3NvY2lhdGVkIFNMQXMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlWm9vbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNlcnZpY2VJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlcnZpY2VJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UKICAgIG15ICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISRTZXJ2aWNle1NlcnZpY2VJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFNlcnZpY2VJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIHJ1biBjb25maWcgaXRlbSBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVNZW51cyAgID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRNZW51c3skTWVudX0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlbGYtPntTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBjbGFzc2VzCiAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ1BvcFVwJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnQXNQb3B1cCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ0JhY2snICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdIaXN0b3J5QmFjayc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICAgICAgJENvdW50ZXIgPSAkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gXCVTZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgIENvdW50ZXIgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc2xhIG9iamVjdAogICAgbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCVTTEFMaXN0KSB7CgogICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTTEEnLAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IHsgJFNMQUxpc3R7JGF9IGNtcCAkU0xBTGlzdHskYn0gfSBrZXlzICVTTEFMaXN0ICkgewoKICAgICAgICAgICAgIyBnZXQgc2xhIGRhdGEKICAgICAgICAgICAgbXkgJVNMQSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgICAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVTTEEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgS2V5ICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGluayB0YWJsZSB2aWV3IG1vZGUKICAgIG15ICRMaW5rVGFibGVWaWV3TW9kZSA9ICRDb25maWdPYmplY3QtPkdldCgnTGlua09iamVjdDo6Vmlld01vZGUnKTsKCiAgICAjIGNyZWF0ZSB0aGUgbGluayB0YWJsZQogICAgbXkgJExpbmtUYWJsZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5MaW5rT2JqZWN0VGFibGVDcmVhdGUoCiAgICAgICAgTGlua0xpc3RXaXRoRGF0YSA9PiAkTGlua0xpc3RXaXRoRGF0YSwKICAgICAgICBWaWV3TW9kZSAgICAgICAgID0+ICRMaW5rVGFibGVWaWV3TW9kZSwKICAgICAgICBPYmplY3QgICAgICAgICAgID0+ICdTZXJ2aWNlJywKICAgICAgICBLZXkgICAgICAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICApOwoKICAgICMgb3V0cHV0IHRoZSBsaW5rIHRhYmxlCiAgICBpZiAoJExpbmtUYWJsZVN0cmcpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGlua1RhYmxlJyAuICRMaW5rVGFibGVWaWV3TW9kZSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMaW5rVGFibGVTdHJnID0+ICRMaW5rVGFibGVTdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ2dyZWVubGVkJywKICAgICAgICB3YXJuaW5nICAgICA9PiAneWVsbG93bGVkJywKICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICk7CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCBjcmVhdGUgdXNlciBkYXRhCiAgICAkU2VydmljZXtDcmVhdGVCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDcmVhdGVCeX0sCiAgICApOwoKICAgICMgZ2V0IGNoYW5nZSB1c2VyIGRhdGEKICAgICRTZXJ2aWNle0NoYW5nZUJ5TmFtZX0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBnZXQgc2xhIG9iamVjdAogICAgbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICglU0xBTGlzdCkgewogICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IHsgJFNMQUxpc3R7JGF9IGNtcCAkU0xBTGlzdHskYn0gfSBrZXlzICVTTEFMaXN0ICkgewoKICAgICAgICAgICAgIyBnZXQgc2xhIGRhdGEKICAgICAgICAgICAgbXkgJVNMQSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgICAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNMQSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlICAgPT4gVHJhbnNsYXRhYmxlKCdPdmVydmlldycpLAogICAgICAgIFJlZnJlc2ggPT4gJFJlZnJlc2gsCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU0xBJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEFQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNMQUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gIlNMQUlEIiApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTTEFJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBTTEFJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2xhCiAgICBteSAlU0xBID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFHZXQoCiAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISRTTEF7U0xBSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFNMQUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNhbGVuZGFyIG5hbWUKICAgIGlmICggJFNMQXtDYWxlbmRhcn0gKSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gIkNhbGVuZGFyICRTTEF7Q2FsZW5kYXJ9IC0gIgogICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkU0xBe0NhbGVuZGFyfSAuICJOYW1lIiApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gVHJhbnNsYXRhYmxlKCdDYWxlbmRhciBEZWZhdWx0Jyk7CiAgICB9CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNyZWF0ZSBieSkKICAgICRTTEF7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDcmVhdGVCeX0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgZGF0YSAoY2hhbmdlIGJ5KQogICAgJFNMQXtDaGFuZ2VCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIGdlbmVyYXRlIFBERiBvdXRwdXQKICAgIG15ICVQYWdlOwoKICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAkUGFnZXtNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgfQogICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgJFBhZ2V7TWFyZ2luUmlnaHR9ICA9IDQwOwogICAgJFBhZ2V7TWFyZ2luQm90dG9tfSA9IDQwOwogICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgJFBhZ2V7SGVhZGVyUmlnaHR9ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU0xBJyk7CiAgICAkUGFnZXtQYWdlVGV4dH0gICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQYWdlJyk7CiAgICAkUGFnZXtQYWdlQ291bnR9ICAgID0gMTsKCiAgICAjIGNyZWF0ZSBuZXcgUERGIGRvY3VtZW50CiAgICAkUERGT2JqZWN0LT5Eb2N1bWVudE5ldygKICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFNMQXtOYW1lfSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlyc3QgUERGIHBhZ2UKICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgJVBhZ2UsCiAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2V7UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2V7UGFnZUNvdW50fSwKICAgICk7CiAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgdGl0bGUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNMQXtOYW1lfSwKICAgICAgICBGb250U2l6ZSA9PiAxMywKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdwcmludGVkIGJ5JykgLiAnICcKICAgICAgICAgICAgLiAkU2VsZi0+e1VzZXJGdWxsbmFtZX0gLiAnICcKICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57VGltZX0sCiAgICAgICAgRm9udFNpemUgPT4gOSwKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTQsCiAgICApOwoKICAgICMgb3V0cHV0IGdlbmVyYWwgaW5mb3MKICAgICRTZWxmLT5fUERGT3V0cHV0R2VuZXJhbEluZm9zKAogICAgICAgIFBhZ2UgPT4gXCVQYWdlLAogICAgICAgIFNMQSAgPT4gXCVTTEEsCiAgICApOwoKICAgICMgb3V0cHV0IGRldGFpbGVkIGluZm9zCiAgICAkU2VsZi0+X1BERk91dHB1dERldGFpbGVkSW5mb3MoCiAgICAgICAgUGFnZSA9PiBcJVBhZ2UsCiAgICAgICAgU0xBICA9PiBcJVNMQSwKICAgICk7CgogICAgIyBjcmVhdGUgZmlsZSBuYW1lCiAgICBteSAkRmlsZW5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgRmlsZW5hbWUgPT4gJFNMQXtOYW1lfSwKICAgICAgICBUeXBlICAgICA9PiAnQXR0YWNobWVudCcsCiAgICApOwoKICAgICMgZ2V0IGRhdGV0aW1lIG9iamVjdAogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgIyByZXR1cm4gdGhlIFBERiBkb2N1bWVudAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gInNsYV8ke0ZpbGVuYW1lfV8iIC4gJERhdGVUaW1lT2JqZWN0LT5Gb3JtYXQoIEZvcm1hdCA9PiAiJVktJW0tJWRfJUg6JU0iICkgLiAnLnBkZicsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL3BkZicsCiAgICAgICAgQ29udGVudCAgICAgPT4gJFBERk9iamVjdC0+RG9jdW1lbnRPdXRwdXQoKSwKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICk7Cn0KCnN1YiBfUERGT3V0cHV0R2VuZXJhbEluZm9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFBhZ2UgU0xBKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTTEEnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntOYW1lfSwKICAgICAgICB9LAogICAgXTsKCiAgICAjIGNyZWF0ZSByaWdodCB0YWJsZQogICAgbXkgJFRhYmxlUmlnaHQgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U0xBfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntDaGFuZ2VCeU5hbWV9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhc3QgY2hhbmdlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTTEF9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFzdCBjaGFuZ2VkIGJ5JykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTTEF9LT57Q2hhbmdlQnlOYW1lfSwKICAgICAgICB9LAogICAgXTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gNTA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSAyMDAuNTsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVszXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzRde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFBERk9iamVjdC0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAleyAkUGFyYW17UGFnZX0gfSwKICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhcmFte1BhZ2V9LT57UGFnZVRleHR9IC4gJyAnIC4gJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fQogICAgICAgICk7CiAgICAgICAgJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSsrOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0RGV0YWlsZWRJbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNMQSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgY3JlYXRlIHRhYmxlCiAgICBteSAkVGFibGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e05hbWV9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1R5cGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U0xBfS0+e1R5cGV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2FsZW5kYXInKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U0xBfS0+e0NhbGVuZGFyTmFtZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRmlyc3QgUmVzcG9uc2UgVGltZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U0xBfS0+e0ZpcnN0UmVzcG9uc2VUaW1lfSApCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVcGRhdGUgVGltZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTTEF9LT57VXBkYXRlVGltZX0gKSAuICcgJwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTb2x1dGlvbiBUaW1lJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1NMQX0tPntTb2x1dGlvblRpbWV9ICkKICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnbWludXRlcycpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnKQogICAgICAgICAgICAgICAgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICRQYXJhbXtTTEF9LT57TWluVGltZUJldHdlZW5JbmNpZGVudHN9LAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgIF07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3dzID0gQHskVGFibGV9OwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gMTIwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMzkxOwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gICAgICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgbGFzdCBQQUdFIGlmICRUYWJsZVBhcmFte1N0YXRlfTsKCiAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEFab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAiU0xBSUQiICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFNMQUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEKICAgIG15ICVTTEEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUdldCgKICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJFNMQXtTTEFJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkU0xBSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY2FsZW5kYXIgbmFtZQogICAgaWYgKCAkU0xBe0NhbGVuZGFyfSApIHsKICAgICAgICAkU0xBe0NhbGVuZGFyTmFtZX0gPSAiQ2FsZW5kYXIgJFNMQXtDYWxlbmRhcn0gLSAiCiAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRTTEF7Q2FsZW5kYXJ9IC4gIk5hbWUiICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU0xBe0NhbGVuZGFyTmFtZX0gPSBUcmFuc2xhdGFibGUoJ0NhbGVuZGFyIERlZmF1bHQnKTsKICAgIH0KCiAgICAjIHJ1biBjb25maWcgaXRlbSBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNlbGYtPntTTEFJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQmFjaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0hpc3RvcnlCYWNrJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU0xBICAgICA9PiBcJVNMQSwKICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIENvbmZpZyAgPT4gJE1lbnVzeyRNZW51fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFNMQXtTZXJ2aWNlSURzfSAmJiByZWYgJFNMQXtTZXJ2aWNlSURzfSBlcSAnQVJSQVknICYmIEB7ICRTTEF7U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHNlcnZpY2UgbGlzdAogICAgICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRTTEF7U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgdG8gaGFzaAogICAgICAgICAgICAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2U7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgICAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICAgICApOwoKICAgICAgICBteSAkQ3NzQ2xhc3MgPSAnJzsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VydmljZUxpc3R7JGF9LT57TmFtZX0gY21wICRTZXJ2aWNlTGlzdHskYn0tPntOYW1lfSB9CiAgICAgICAgICAgIGtleXMgJVNlcnZpY2VMaXN0CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIHNldCBvdXRwdXQgb2JqZWN0CiAgICAgICAgICAgICRDc3NDbGFzcyA9ICRDc3NDbGFzcyBlcSAnc2VhcmNocGFzc2l2ZScgPyAnc2VhcmNoYWN0aXZlJyA6ICdzZWFyY2hwYXNzaXZlJzsKCiAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2VSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXsgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVNpZ25hbCA9PiAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfS0+e0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICAgICAgQ3NzQ2xhc3MgICAgICA9PiAkQ3NzQ2xhc3MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgZ2V0IGNyZWF0ZSB1c2VyIGRhdGEKICAgICRTTEF7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDcmVhdGVCeX0sCiAgICApOwoKICAgICMgZ2V0IGNoYW5nZSB1c2VyIGRhdGEKICAgICRTTEF7Q2hhbmdlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU0xBWm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlU0xBLAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTZXJ2aWNlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1JvID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cFJvfQogICAgICAgIHx8IFtdOwogICAgbXkgJEdyb3Vwc1J3ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cH0KICAgICAgICB8fCBbXTsKCiAgICAjIHNldCBhY2Nlc3MKICAgIG15ICRBY2Nlc3MgPSAxOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgR3JvdXBOYW1lID0+ICRSb0dyb3VwLAogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdybycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUk9HUk9VUDsKICAgICAgICB9CgogICAgICAgICMgZmluZCByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkUndHcm91cCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6TGluazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXB9CiAgICAgICAgfHwgW107CgogICAgIyBzZXQgYWNjZXNzCiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gJiYgQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAkQWNjZXNzID0gMDsKCiAgICAgICAgIyBmaW5kIHJlYWQgd3JpdGUgZ3JvdXBzCiAgICAgICAgUldHUk9VUDoKICAgICAgICBmb3IgbXkgJFJ3R3JvdXAgKCBAeyRHcm91cHNSd30gKSB7CgogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgR3JvdXBOYW1lID0+ICRSd0dyb3VwLAogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUldHUk9VUDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIGNoZWNrIGlmIHNlcnZpY2VzIGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBvYmplY3RzCiAgICBteSAlUG9zc2libGVPYmplY3RzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+UG9zc2libGVPYmplY3RzTGlzdCgKICAgICAgICBPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZG9uJ3Qgc2hvdyBsaW5rIG1lbnUgaXRlbSBpZiB0aGVyZSBhcmUgbm8gbGlua2FibGUgb2JqZWN0cwogICAgcmV0dXJuIGlmICElUG9zc2libGVPYmplY3RzOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17U2VydmljZX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TTEFNZW51OjpHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NMQX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNMQSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1JvID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cFJvfQogICAgICAgIHx8IFtdOwogICAgbXkgJEdyb3Vwc1J3ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cH0KICAgICAgICB8fCBbXTsKCiAgICAjIHNldCBhY2Nlc3MKICAgIG15ICRBY2Nlc3MgPSAxOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgR3JvdXBOYW1lID0+ICRSb0dyb3VwLAogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdybycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUk9HUk9VUDsKICAgICAgICB9CgogICAgICAgICMgZmluZCByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkUndHcm91cCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NMQX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpKU09OJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OlNlcnZpY2UgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKHNlcnZpY2UpCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpTZXJ2aWNlLT5uZXcoCiAgICAgICAgVXNlckxhbmd1YWdlID0+ICdlbicsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVXNlckxhbmd1YWdlIFVzZXJJRCkpIHsKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9IHx8IGRpZSAiR290IG5vICROZWVkZWQhIjsKICAgIH0KCiAgICAjIHdlIG5lZWQgb3VyIG93biBMYXlvdXRPYmplY3QgaW5zdGFuY2UgdG8gYXZvaWQgYmxvY2tkYXRhIGNvbGxpc2lvbnMKICAgICMgd2l0aCB0aGUgbWFpbiBwYWdlLgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dC0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKICAgICRTZWxmLT57T2JqZWN0RGF0YX0gPSB7CiAgICAgICAgT2JqZWN0ICAgICA9PiAnU2VydmljZScsCiAgICAgICAgUmVhbG5hbWUgICA9PiAnU2VydmljZScsCiAgICAgICAgT2JqZWN0TmFtZSA9PiAnU291cmNlT2JqZWN0SUQnLAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBUYWJsZUNyZWF0ZUNvbXBsZXgoKQoKcmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIGJsb2NrIGRhdGEKClJldHVybgoKICAgIEBCbG9ja0RhdGEgPSAoCgogICAgICAgIE9iamVjdE5hbWUgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgIE9iamVjdElEICAgID0+ICcxMjMnLAoKICAgICAgICBPYmplY3QgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEJsb2NrbmFtZSA9PiAnU2VydmljZScsCiAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUeXBlJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ2hhbmdlZCcsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDE1MCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIEl0ZW1MaXN0ID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0luY2lTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdTZXJ2aWNlIEJsYScsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgID0+ICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPTEyMycsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdPdGhlcicsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0hpZ2gnLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnSW5jaVNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAzMjEsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ1NlcnZpY2UgQmxhJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgPT4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9MzIxJywKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ090aGVyJywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTG93JywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDctMDItMDIgMjI6MTI6MDAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgKTsKCiAgICBAQmxvY2tEYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlQ29tcGxleCgKICAgICAgICBPYmplY3RMaW5rTGlzdFdpdGhEYXRhID0+ICRPYmplY3RMaW5rTGlzdFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVDb21wbGV4IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB8fCByZWYgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY29udmVydCB0aGUgbGlzdAogICAgbXkgJUxpbmtMaXN0OwogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7JExpbmtUeXBlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJERpcmVjdGlvbkxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn07CgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKCiAgICAgICAgICAgICAgICAkTGlua0xpc3R7JFNlcnZpY2VJRH0tPntEYXRhfSA9ICREaXJlY3Rpb25MaXN0LT57JFNlcnZpY2VJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJENvbXBsZXhUYWJsZURhdGEgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZSIpOwogICAgbXkgJERlZmF1bHRDb2x1bW5zOwogICAgaWYgKAogICAgICAgICRDb21wbGV4VGFibGVEYXRhCiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoJENvbXBsZXhUYWJsZURhdGEpCiAgICAgICAgJiYgJENvbXBsZXhUYWJsZURhdGEtPntTZXJ2aWNlfQogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQ29tcGxleFRhYmxlRGF0YS0+e1NlcnZpY2V9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgJERlZmF1bHRDb2x1bW5zID0gJENvbXBsZXhUYWJsZURhdGEtPnsiU2VydmljZSJ9LT57IkRlZmF1bHRDb2x1bW5zIn07CiAgICB9CgogICAgbXkgQFRpbWVMb25nVHlwZXMgPSAoCiAgICAgICAgJ0NyZWF0ZVRpbWUnLAogICAgICAgICdDaGFuZ2VUaW1lJywKICAgICk7CgogICAgbXkgQFRyYW5zbGF0ZVR5cGVzID0gKAogICAgICAgICdUeXBlJywKICAgICAgICAnQ3JpdGljYWxpdHknLAogICAgKTsKCiAgICAjIGFsd2F5cyBzaG93IHRoZSBpbmNpZGVudCBzdGF0ZSBmbGFnIGFuZCB0aGUgc2VydmljZSBuYW1lCiAgICBteSBASGVhZGxpbmUgPSAoCiAgICAgICAgewogICAgICAgICAgICBDb250ZW50ID0+ICdJbmNpZGVudCBTdGF0ZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIENvbnRlbnQgPT4gJ1NlcnZpY2UnLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIExvYWQgdXNlciBwcmVmZXJlbmNlcy4KICAgIG15ICVQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkRGVmYXVsdENvbHVtbnMgfHwgIUlzSGFzaFJlZldpdGhEYXRhKCREZWZhdWx0Q29sdW1ucykgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNaXNzaW5nIGNvbmZpZ3VyYXRpb24gZm9yIExpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZSMjI1NlcnZpY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEdldCBkZWZhdWx0IGNvbHVtbiBwcmlvcml0eSBmcm9tIFN5c0NvbmZpZy4KICAgICMgRWFjaCBjb2x1bW4gaW4gdGFibGUgKFRpdGxlLCBTdGF0ZSwuLi4pIGhhcyBkZWZpbmVkIFByaW9yaXR5IGluIFN5c0NvbmZpZy4gU3lzdGVtIHVzZSB0aGlzCiAgICAjICAgcHJpb3JpdHkgdG8gc29ydCBjb2x1bW5zLCBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSBvd24gc2V0dGluZ3MuCiAgICBteSAlU29ydE9yZGVyOwogICAgaWYgKAogICAgICAgICRDb21wbGV4VGFibGVEYXRhLT57IlNlcnZpY2UifS0+eyJQcmlvcml0eSJ9CiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDb21wbGV4VGFibGVEYXRhLT57IlNlcnZpY2UifS0+eyJQcmlvcml0eSJ9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgJVNvcnRPcmRlciA9ICV7ICRDb21wbGV4VGFibGVEYXRhLT57IlNlcnZpY2UifS0+eyJQcmlvcml0eSJ9IH07CiAgICB9CgogICAgbXkgJVVzZXJDb2x1bW5zID0gJXskRGVmYXVsdENvbHVtbnN9OwoKICAgIGlmICggJFByZWZlcmVuY2VzeydMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUtU2VydmljZSd9ICkgewoKICAgICAgICBteSAkQ29sdW1uc0VuYWJsZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpLT5EZWNvZGUoCiAgICAgICAgICAgIERhdGEgPT4gJFByZWZlcmVuY2VzeydMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUtU2VydmljZSd9LAogICAgICAgICk7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbHVtbnNFbmFibGVkCiAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb2x1bW5zRW5hYmxlZCkKICAgICAgICAgICAgJiYgJENvbHVtbnNFbmFibGVkLT57T3JkZXJ9CiAgICAgICAgICAgICYmIElzQXJyYXlSZWZXaXRoRGF0YSggJENvbHVtbnNFbmFibGVkLT57T3JkZXJ9ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgIyBDbGVhciBzb3J0IG9yZGVyLgogICAgICAgICAgICAlU29ydE9yZGVyID0gKCk7CgogICAgICAgICAgICBERUZBVUxUQ09MVU1OOgogICAgICAgICAgICBmb3IgbXkgJERlZmF1bHRDb2x1bW4gKCBzb3J0IGtleXMgJVVzZXJDb2x1bW5zICkgewogICAgICAgICAgICAgICAgbXkgJEluZGV4ID0gMDsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJFVzZXJTZXR0aW5nICggQHsgJENvbHVtbnNFbmFibGVkLT57T3JkZXJ9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRGVmYXVsdENvbHVtbiBlcSAkVXNlclNldHRpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRVc2VyQ29sdW1uc3skRGVmYXVsdENvbHVtbn0gPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAkU29ydE9yZGVyeyREZWZhdWx0Q29sdW1ufSAgID0gJEluZGV4OwoKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBERUZBVUxUQ09MVU1OOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE5vdCBmb3VuZCwgbWVhbnMgdXNlciBjaG9zZSB0byBoaWRlIHRoaXMgaXRlbS4KICAgICAgICAgICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyREZWZhdWx0Q29sdW1ufSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgICRVc2VyQ29sdW1uc3skRGVmYXVsdENvbHVtbn0gPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggISRTb3J0T3JkZXJ7JERlZmF1bHRDb2x1bW59ICkgewogICAgICAgICAgICAgICAgICAgICRTb3J0T3JkZXJ7JERlZmF1bHRDb2x1bW59ID0gMDsgICAgIyBTZXQgMCwgaXQgc3lzdGVtIHdpbGwgaGlkZSB0aGlzIGl0ZW0gYW55d2F5cwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgVXNlciBoYXMgbm8gb3duIHNldHRpbmdzLgogICAgICAgIGZvciBteSAkQ29sdW1uICggc29ydCBrZXlzICVVc2VyQ29sdW1ucyApIHsKICAgICAgICAgICAgaWYgKCAhJFNvcnRPcmRlcnskQ29sdW1ufSApIHsKICAgICAgICAgICAgICAgICRTb3J0T3JkZXJ7JENvbHVtbn0gPSAwOyAgICAgICAgICAgICAgICMgU2V0IDAsIGl0IHN5c3RlbSB3aWxsIGhpZGUgdGhpcyBpdGVtIGFueXdheXMKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIERlZmluZSBIZWFkbGluZSBjb2x1bW5zLgogICAgbXkgQEFsbENvbHVtbnM7CiAgICBDT0xVTU46CiAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQgeyAkU29ydE9yZGVyeyRhfSA8PT4gJFNvcnRPcmRlcnskYn0gfSBrZXlzICVVc2VyQ29sdW1ucyApIHsKCiAgICAgICAgbXkgJENvbHVtblRyYW5zbGF0ZSA9ICRDb2x1bW47CiAgICAgICAgaWYgKCAkQ29sdW1uIGVxICdDdXJJbmNpU3RhdGUnICkgewogICAgICAgICAgICAkQ29sdW1uVHJhbnNsYXRlID0gVHJhbnNsYXRhYmxlKCdJbmNpZGVudCBTdGF0ZScpOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRDb2x1bW4gZXEgJ0NyZWF0ZVRpbWUnICkgewogICAgICAgICAgICAkQ29sdW1uVHJhbnNsYXRlID0gVHJhbnNsYXRhYmxlKCdDcmVhdGVkJyk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ2hhbmdlVGltZScgKSB7CiAgICAgICAgICAgICRDb2x1bW5UcmFuc2xhdGUgPSBUcmFuc2xhdGFibGUoJ0NoYW5nZWQnKTsKICAgICAgICB9CgogICAgICAgIHB1c2ggQEFsbENvbHVtbnMsIHsKICAgICAgICAgICAgQ29sdW1uTmFtZSAgICAgID0+ICRDb2x1bW4sCiAgICAgICAgICAgIENvbHVtblRyYW5zbGF0ZSA9PiAkQ29sdW1uVHJhbnNsYXRlLAogICAgICAgIH07CgogICAgICAgICMgaWYgZW5hYmxlZCBieSBkZWZhdWx0LgogICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyRDb2x1bW59ID09IDIgKSB7CiAgICAgICAgICAgIHB1c2ggQEhlYWRsaW5lLCB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRDb2x1bW5UcmFuc2xhdGUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIHRoZSBpdGVtIGxpc3QgKHRhYmxlIGNvbnRlbnQpCiAgICBteSBASXRlbUxpc3Q7CiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgc29ydCB7IGxjICRMaW5rTGlzdHskYX17RGF0YX0tPntOYW1lfSBjbXAgbGMgJExpbmtMaXN0eyRifXtEYXRhfS0+e05hbWV9IH0KICAgICAgICBrZXlzICVMaW5rTGlzdAogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBleHRyYWN0IHNlcnZpY2UgZGF0YQogICAgICAgIG15ICRTZXJ2aWNlID0gJExpbmtMaXN0eyRTZXJ2aWNlSUR9LT57RGF0YX07CgogICAgICAgICMgQ3VySW5jaVNpZ25hbCBtdXN0IGFsd2F5cyBiZSBwcmVzZW50LCBhcyB3ZWxsIGFzIHNlcnZpY2UgbmFtZQogICAgICAgICMgKGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIG1hc3RlciBsaW5rIHRvIHRoZSBTZXJ2aWNlKS4KICAgICAgICBteSBASXRlbUNvbHVtbnMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0N1ckluY2lTaWduYWwnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAkU2VydmljZS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICRTZXJ2aWNlLT57Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkU2VydmljZS0+e05hbWV9LAogICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPScKICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIENPTFVNTjoKICAgICAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQgeyAkU29ydE9yZGVyeyRhfSA8PT4gJFNvcnRPcmRlcnskYn0gfSBrZXlzICVVc2VyQ29sdW1ucyApIHsKCiAgICAgICAgICAgICMgaWYgZW5hYmxlZCBieSBkZWZhdWx0CiAgICAgICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyRDb2x1bW59ID09IDIgKSB7CgogICAgICAgICAgICAgICAgbXkgJUhhc2g7CiAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkQ29sdW1uIH0gQFRpbWVMb25nVHlwZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1R5cGUnfSA9ICdUaW1lTG9uZyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkSGFzaHsnVHlwZSd9ID0gJ1RleHQnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJENvbHVtbiBlcSAnQ29tbWVudCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7TWF4TGVuZ3RofSA9IDMwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRDb2x1bW4gfSBAVHJhbnNsYXRlVHlwZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1RyYW5zbGF0ZSd9ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkSGFzaHsnQ29udGVudCd9ID0gJFNlcnZpY2UtPnskQ29sdW1ufTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgXCVIYXNoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXEBJdGVtQ29sdW1uczsKICAgIH0KCiAgICByZXR1cm4gaWYgIUBJdGVtTGlzdDsKCiAgICAjIERlZmluZSB0aGUgYmxvY2sgZGF0YS4KICAgIG15ICVCbG9jayA9ICgKICAgICAgICBPYmplY3QgICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9LAogICAgICAgIEJsb2NrbmFtZSAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgT2JqZWN0TmFtZSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0TmFtZX0sCiAgICAgICAgT2JqZWN0SUQgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIEhlYWRsaW5lICAgPT4gXEBIZWFkbGluZSwKICAgICAgICBJdGVtTGlzdCAgID0+IFxASXRlbUxpc3QsCiAgICAgICAgQWxsQ29sdW1ucyA9PiBcQEFsbENvbHVtbnMsCiAgICApOwoKICAgIHJldHVybiAoIFwlQmxvY2sgKTsKCn0KCj1oZWFkMiBUYWJsZUNyZWF0ZVNpbXBsZSgpCgpyZXR1cm4gYSBoYXNoIHdpdGggdGhlIGxpbmsgb3V0cHV0IGRhdGEKClJldHVybgoKICAgICVMaW5rT3V0cHV0RGF0YSA9ICgKICAgICAgICBOb3JtYWw6OlNvdXJjZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6VGhlIHNlcnZpY1suLl0nLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ1NlcnZpY2U6IFRoZSBzZXJ2aWNlIG5hbWUnLAogICAgICAgICAgICAgICAgICAgIENzcyAgICAgPT4gJ3N0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTOk5hbWUgb2Ygc2VydmljWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogTmFtZSBvZiBzZXJ2aWNlIDInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFBhcmVudENoaWxkOjpUYXJnZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTOlNlcnZpY2UgbmFtWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogU2VydmljZSBuYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJUxpbmtPdXRwdXREYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlU2ltcGxlKAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZVNpbXBsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKAogICAgICAgICAgICAgICAgc29ydCB7CiAgICAgICAgICAgICAgICAgICAgbGMgJERpcmVjdGlvbkxpc3QtPnskYX0tPntOYW1lU2hvcnR9IGNtcCBsYyAkRGlyZWN0aW9uTGlzdC0+eyRifS0+e05hbWVTaG9ydH0KICAgICAgICAgICAgICAgIH0ga2V5cyAleyREaXJlY3Rpb25MaXN0fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2UgPSAkRGlyZWN0aW9uTGlzdC0+eyRTZXJ2aWNlSUR9OwoKICAgICAgICAgICAgICAgICMgZGVmaW5lIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgbXkgJUl0ZW0gPSAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAiUzokU2VydmljZS0+e05hbWVTaG9ydH0iLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JwogICAgICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDIwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXCVJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBpdGVtIGxpc3QgdG8gbGluayBvdXRwdXQgZGF0YQogICAgICAgICAgICAkTGlua091dHB1dERhdGF7ICRMaW5rVHlwZSAuICc6OicgLiAkRGlyZWN0aW9uIH0tPntTZXJ2aWNlfSA9IFxASXRlbUxpc3Q7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlTGlua091dHB1dERhdGE7Cn0KCj1oZWFkMiBDb250ZW50U3RyaW5nQ3JlYXRlKCkKCnJldHVybiBhIG91dHB1dCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+Q29udGVudFN0cmluZ0NyZWF0ZSgKICAgICAgICBDb250ZW50RGF0YSA9PiAkSGFzaFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ29udGVudFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29udGVudERhdGF9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb250ZW50RGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXh0cmFjdCBjb250ZW50CiAgICBteSAkQ29udGVudCA9ICRQYXJhbXtDb250ZW50RGF0YX07CgogICAgcmV0dXJuIGlmICRDb250ZW50LT57VHlwZX0gbmUgJ0N1ckluY2lTaWduYWwnOwoKICAgICMgc2V0IGluY2lkZW50IHNpZ25hbAogICAgbXkgJUluY2lTaWduYWxzID0gKAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgdW5rbm93biAgICAgPT4gJ2dyYXlsZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgKTsKCiAgICAjIGludmVzdGlnYXRlIGN1cnJlbnQgaW5jaWRlbnQgc2lnbmFsCiAgICAkQ29udGVudC0+e0N1ckluY2lTdGF0ZVR5cGV9IHx8PSAndW5rbm93bic7CiAgICBteSAkQ3VySW5jaVNpZ25hbCA9ICRJbmNpU2lnbmFsc3sgJENvbnRlbnQtPntDdXJJbmNpU3RhdGVUeXBlfSB9OwogICAgJEN1ckluY2lTaWduYWwgfHw9ICRJbmNpU2lnbmFsc3t1bmtub3dufTsKCiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGUgPT4gJzxkaXYgY2xhc3M9IkZsYWcgU21hbGwiIHRpdGxlPSJbJSBEYXRhLkN1ckluY2lTdGF0ZSB8IGh0bWwgJV0iPiAnCiAgICAgICAgICAgIC4gJzxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgfCBodG1sICVdIj48L3NwYW4+IDwvZGl2PicsCgogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRDdXJJbmNpU2lnbmFsLAogICAgICAgICAgICBDdXJJbmNpU3RhdGUgID0+ICRDb250ZW50LT57Q29udGVudH0gfHwgJycsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1oZWFkMiBTZWxlY3RhYmxlT2JqZWN0TGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlbGVjdC1hYmxlIG9iamVjdHMKClJldHVybgoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gJ1NlcnZpY2UnLAogICAgICAgIH0sCiAgICApOwoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICRMaW5rT2JqZWN0LT5TZWxlY3RhYmxlT2JqZWN0TGlzdCgKICAgICAgICBTZWxlY3RlZCA9PiAkSWRlbnRpZmllciwgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBTZWxlY3RhYmxlT2JqZWN0TGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxlY3RlZDsKICAgIGlmICggJFBhcmFte1NlbGVjdGVkfSAmJiAkUGFyYW17U2VsZWN0ZWR9IGVxICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9ICkgewogICAgICAgICRTZWxlY3RlZCA9IDE7CiAgICB9CgogICAgIyBvYmplY3Qgc2VsZWN0IGxpc3QKICAgIG15IEBPYmplY3RTZWxlY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgICAgIFZhbHVlICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntSZWFsbmFtZX0sCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdFNlbGVjdExpc3Q7Cn0KCj1oZWFkMiBTZWFyY2hPcHRpb25MaXN0KCkKCnJldHVybiBhbiBhcnJheSBoYXNoIHdpdGggc2VhcmNoIG9wdGlvbnMKClJldHVybgoKICAgIEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdOYW1lJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJ1NlcnZpY2UgTmFtZScsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAkTGlua09iamVjdC0+U2VhcmNoT3B0aW9uTGlzdCgpOwoKPWN1dAoKc3ViIFNlYXJjaE9wdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNlYXJjaCBvcHRpb24gbGlzdAogICAgbXkgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdOYW1lJywKICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvcm1rZXkKICAgIGZvciBteSAkUm93IChAU2VhcmNoT3B0aW9uTGlzdCkgewogICAgICAgICRSb3ctPntGb3JtS2V5fSA9ICdTRUFSQ0g6OicgLiAkUm93LT57S2V5fTsKICAgIH0KCiAgICAjIGFkZCBmb3JtIGRhdGEgYW5kIGlucHV0IHN0cmluZwogICAgUk9XOgogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CgogICAgICAgICMgZ2V0IGZvcm0gZGF0YQogICAgICAgICRSb3ctPntGb3JtRGF0YX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAkUm93LT57Rm9ybUtleX0gKTsKCiAgICAgICAgIyBwYXJzZSB0aGUgaW5wdXQgdGV4dCBibG9jawogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0lucHV0VGV4dCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJFJvdy0+e0Zvcm1LZXl9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFJvdy0+e0Zvcm1EYXRhfSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgJFJvdy0+e0lucHV0U3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdMaW5rT2JqZWN0JywKICAgICAgICApOwoKICAgICAgICBuZXh0IFJPVzsKICAgIH0KCiAgICByZXR1cm4gQFNlYXJjaE9wdGlvbkxpc3Q7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
PGRpdiBjbGFzcz0iU3BhY2luZyBDZW50ZXIiPgogICAgPHNwYW4gY2xhc3M9IkFKQVhMb2FkZXIiIHRpdGxlPSJ7eyBTcGFuVGl0bGUgfCBUcmFuc2xhdGUgfX0iPjwvc3Bhbj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkNyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPjxoMj5bJSBUcmFuc2xhdGUoIk5vdGUiKSB8IGh0bWwgJV08L2gyPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk1hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlByaW9yaXR5IGFsbG9jYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJDSVBBbGxvY2F0ZSIvPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIERhdGFUYWJsZU5vSGlnaGxpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5PYmplY3RUeXBlKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdE9wdGlvbikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRGVzY3JpcHRpb25DZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdE9wdGlvbikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIkRlc2NyaXB0aW9uQ2VsbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNvbnRlbnRDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJDb250ZW50Q2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCBTYXZlQnV0dG9ucyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBkNDNjZTg4NGM5ZjFmNDcyZDU2Y2ZmZjI1ZTAyZjE1NmQ5NTdmZTNjIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNlcnZpY2UudHQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiU2VydmljZSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ1NlcnZpY2UgTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiBFbnYoIkFjdGlvbiIpLAogICAgICAgICAgICB9LAogICAgICAgIF0KICAgICVdCgogICAgWyUgSUYgRGF0YS5TZXJ2aWNlSUQgPT0gIk5FVyIgICVdCiAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gVHJhbnNsYXRlKCJBZGQgU2VydmljZSIpLH0pICVdCiAgICBbJSBFTFNJRiBEYXRhLlNlcnZpY2VJRCAlXQogICAgICAgIFslIFVTRSBFZGl0VGl0bGUgPSBTdHJpbmcoVHJhbnNsYXRlKCJFZGl0IFNlcnZpY2UiKSkgJV0KICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBFZGl0VGl0bGUuYXBwZW5kKCAnOiAnLCBEYXRhLlNlcnZpY2VOYW1lICkgfSkgJV0KICAgIFslIEVORCAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TZXJ2aWNlRWRpdDtTZXJ2aWNlSUQ9TkVXIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIHNlcnZpY2UiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkZpbHRlciIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj48bGFiZWwgZm9yPSJGaWx0ZXJTZXJ2aWNlcyI+WyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIFNlcnZpY2VzIikgfCBodG1sICVdPC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlclNlcnZpY2VzIiBjbGFzcz0iRmlsdGVyQm94IiBwbGFjZWhvbGRlcj0iWyUgVHJhbnNsYXRlKCJKdXN0IHN0YXJ0IHR5cGluZyB0byBmaWx0ZXIuLi4iKSB8IGh0bWwgJV0iIG5hbWU9IkZpbHRlclNlcnZpY2VzIiB2YWx1ZT0iIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJGaWx0ZXIgZm9yIHNlcnZpY2VzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaWx0ZXIiKSAlXQogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJTZXJ2aWNlcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIERhdGEuTGV2ZWxTcGFjZSB8IGh0bWwgJV08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlcnZpY2VFZGl0O1NlcnZpY2VJRD1bJSBEYXRhLlNlcnZpY2VJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgdHJ1bmNhdGUoODApIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyMCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkZpbHRlck1lc3NhZ2UgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij5bJSBUcmFuc2xhdGUoIk5vIG1hdGNoZXMgZm91bmQuIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgWyUgSUYgRGF0YS5TZXJ2aWNlSUQgPT0gJ05FVycgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTZXJ2aWNlIikgfCBodG1sICVdIDogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VydmljZVNhdmUiLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2aWNlSUQiIHZhbHVlPSJbJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlNlcnZpY2VJRCAhPSAnTkVXJyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDb250aW51ZUFmdGVyU2F2ZSIgaWQ9IkNvbnRpbnVlQWZ0ZXJTYXZlIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWVTaG9ydCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLk5hbWVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5Mb25nTmFtZSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiU2VydmljZSBuYW1lIG1heGltdW0gbGVuZ3RoIGlzIDIwMCBjaGFyYWN0ZXJzICh3aXRoIFN1Yi1zZXJ2aWNlKS4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUGFyZW50SUQiPlslIFRyYW5zbGF0ZSgiU3ViLXNlcnZpY2Ugb2YiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUGFyZW50T3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlR5cGVJRCI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlR5cGVPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDcml0aWNhbGl0eSI+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Dcml0aWNhbGl0eU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlZhbGlkSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0S2V5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9IlcyNXBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dEtleSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9IlcyNXBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3B0aW9uIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVXBsb2FkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdHlwZT0iZmlsZSIgc2l6ZT0iMzAiIGNsYXNzPSJmaXhlZCIvPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiPlslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVXBsb2FkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFzc3dvcmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJXMjVwYyIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYXNzd29yZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlNlcnZpY2VJRCAhPSAnTkVXJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdEFuZENvbnRpbnVlIiB0eXBlPSJidXR0b24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSBhbmQgZmluaXNoIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlRWRpdCIpICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBkNDNjZTg4NGM5ZjFmNDcyZDU2Y2ZmZjI1ZTAyZjE1NmQ5NTdmZTNjIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNMQS50dAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJTTEEgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdTTEEgTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiBFbnYoIkFjdGlvbiIpLAogICAgICAgICAgICB9LAogICAgICAgIF0KICAgICVdCgogICAgWyUgSUYgRGF0YS5TTEFJRCAlXQogICAgICAgIFslIFVTRSBFZGl0VGl0bGUgPSBTdHJpbmcoVHJhbnNsYXRlKCJFZGl0IFNMQSIpKSAlXQogICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuU0xBTmFtZSApIH0pICVdCiAgICBbJSBFTFNJRiBEYXRhLlN1YmFjdGlvbiA9PSAiU0xBRWRpdCIgICVdCiAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gVHJhbnNsYXRlKCJBZGQgU0xBIiksfSkgJV0KICAgIFslIEVORCAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNMQUVkaXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgU0xBIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRmlsdGVyIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlclNMQXMiPlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBTTEFzIikgfCBodG1sICVdPC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlclNMQXMiIGNsYXNzPSJGaWx0ZXJCb3giIHBsYWNlaG9sZGVyPSJbJSBUcmFuc2xhdGUoIkp1c3Qgc3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyU0xBcyIgdmFsdWU9IiIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBTTEFzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaWx0ZXIiKSAlXQogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJTTEFzIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAmJiBEYXRhLlZhbGlkSUQgIT0gMSAlXWNsYXNzPSJJbnZhbGlkIlslIEVORCAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNMQUVkaXQ7U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuU2VydmljZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyNikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkZpbHRlck1lc3NhZ2UgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij5bJSBUcmFuc2xhdGUoIk5vIG1hdGNoZXMgZm91bmQuIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3QiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBRWRpdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIFslIElGICFEYXRhLlNMQUlEICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgU0xBIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTTEEiKSB8IGh0bWwgJV0gOiBbJSBEYXRhLk5hbWUgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTTEFTYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU0xBSUQiIHZhbHVlPSJbJSBEYXRhLlNMQUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU0xBSUQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5hbWUiPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLk5hbWVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNlcnZpY2VJRHMiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlR5cGVPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgLS0tCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTZXJ2aWNlSURzIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TZXJ2aWNlT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ2FsZW5kYXIiPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYWxlbmRhck9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZpcnN0UmVzcG9uc2VUaW1lIj5bJSBUcmFuc2xhdGUoIkVzY2FsYXRpb24gLSBmaXJzdCByZXNwb25zZSB0aW1lIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0pOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGaXJzdFJlc3BvbnNlVGltZSIgaWQ9IkZpcnN0UmVzcG9uc2VUaW1lIiB2YWx1ZT0iWyUgRGF0YS5GaXJzdFJlc3BvbnNlVGltZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBweCBWYWxpZGF0ZV9OdW1iZXIiIG1heGxlbmd0aD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkZpcnN0UmVzcG9uc2VUaW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsYWJlbCBmb3I9IkZpcnN0UmVzcG9uc2VOb3RpZnkiPlslIFRyYW5zbGF0ZSgiTm90aWZ5IGJ5IikgfCBodG1sICVdPC9sYWJlbD4gWyUgRGF0YS5GaXJzdFJlc3BvbnNlTm90aWZ5T3B0aW9uU3RyZyAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIjAgPSBubyBlc2NhbGF0aW9uIikgfCBodG1sICVdIC0gMjQgWyUgVHJhbnNsYXRlKCJob3VycyIpIHwgaHRtbCAlXSA9IDE0NDAgWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJPbmx5IGJ1c2luZXNzIGhvdXJzIGFyZSBjb3VudGVkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVXBkYXRlVGltZSI+WyUgVHJhbnNsYXRlKCJFc2NhbGF0aW9uIC0gdXBkYXRlIHRpbWUiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlVwZGF0ZVRpbWUiIGlkPSJVcGRhdGVUaW1lIiB2YWx1ZT0iWyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHB4IFZhbGlkYXRlX051bWJlciIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVXBkYXRlVGltZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGFiZWwgZm9yPSJVcGRhdGVOb3RpZnkiPlslIFRyYW5zbGF0ZSgiTm90aWZ5IGJ5IikgfCBodG1sICVdPC9sYWJlbD4gWyUgRGF0YS5VcGRhdGVOb3RpZnlPcHRpb25TdHJnICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiMCA9IG5vIGVzY2FsYXRpb24iKSB8IGh0bWwgJV0gLSAyNCBbJSBUcmFuc2xhdGUoImhvdXJzIikgfCBodG1sICVdID0gMTQ0MCBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIk9ubHkgYnVzaW5lc3MgaG91cnMgYXJlIGNvdW50ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTb2x1dGlvblRpbWUiPlslIFRyYW5zbGF0ZSgiRXNjYWxhdGlvbiAtIHNvbHV0aW9uIHRpbWUiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlNvbHV0aW9uVGltZSIgaWQ9IlNvbHV0aW9uVGltZSIgdmFsdWU9IlslIERhdGEuU29sdXRpb25UaW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHB4IFZhbGlkYXRlX051bWJlciIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU29sdXRpb25UaW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsYWJlbCBmb3I9IlNvbHV0aW9uTm90aWZ5Ij5bJSBUcmFuc2xhdGUoIk5vdGlmeSBieSIpIHwgaHRtbCAlXTwvbGFiZWw+IFslIERhdGEuU29sdXRpb25Ob3RpZnlPcHRpb25TdHJnICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiMCA9IG5vIGVzY2FsYXRpb24iKSB8IGh0bWwgJV0gLSAyNCBbJSBUcmFuc2xhdGUoImhvdXJzIikgfCBodG1sICVdID0gMTQ0MCBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIk9ubHkgYnVzaW5lc3MgaG91cnMgYXJlIGNvdW50ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTWluVGltZUJldHdlZW5JbmNpZGVudHMiPlslIFRyYW5zbGF0ZSgiTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0pOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50cyIgaWQ9Ik1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIiB2YWx1ZT0iWyUgRGF0YS5NaW5UaW1lQmV0d2VlbkluY2lkZW50cyB8IGh0bWwgJV0iIGNsYXNzPSJXMjVwYyBWYWxpZGF0ZV9OdW1iZXIiIG1heGxlbmd0aD0iMTUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb21tZW50IiBpZD0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBSXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0S2V5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0S2V5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiByb3dzPSJbJSBEYXRhLlJvd3MgfCBodG1sICVdIiBjb2xzPSJbJSBEYXRhLkNvbHMgfCBodG1sICVdIj5bJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk9wdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB0eXBlPSJmaWxlIiBjbGFzcz0iZml4ZWQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiI+WyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJVcGxvYWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYXNzd29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IiIgY2xhc3M9Ilc1MHBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYXNzd29yZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJTTEFJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlNMQUlEICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBRWRpdCIpICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBcmlhUm9sZU1haW4gU3BhY2luZ1RvcCI+CiAgICA8ZGl2IGNsYXNzPSJXNzVwYyBTcGFjaW5nQm90dG9tIENlbnRlckJveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk92ZXJ2aWV3IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBTcGFjaW5nQm90dG9tIj4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsICVdIiB0aXRsZT0iWyUgRGF0YS5TdGF0ZSAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxldmVsU3BhY2UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD1bJSBEYXRhLlNlcnZpY2VJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5Dcml0aWNhbGl0eSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1JvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+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+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ29tbWVudCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEEiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50IFNwYWNpbmdUb3AgIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBc3NvY2lhdGVkIFNMQXMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iPlslIERhdGEuQ29tbWVudCB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNMQVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNMQSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBcmlhUm9sZU1haW4gU3BhY2luZ1RvcCI+CiAgICA8ZGl2IGNsYXNzPSJXNzVwYyBTcGFjaW5nQm90dG9tIENlbnRlckJveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk92ZXJ2aWV3IikgfCBodG1sICVdOiBbJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IFNwYWNpbmdCb3R0b20iPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1JvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUiPgogICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTTEEgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JlYXRlQnlOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlQnlOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOiBbJSBEYXRhLk5hbWUgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBdXRvSGVpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDYWxlbmRhciIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYWxlbmRhck5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJGaXJzdCBSZXNwb25zZSBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlVwZGF0ZSBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlVwZGF0ZVRpbWUgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU29sdXRpb24gVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Tb2x1dGlvblRpbWUgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2UiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTZXJ2aWNlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA1ZjU0N2Q4NzY3M2FhYmU3NzM2YTI4OGI3N2ExZjY1YjI1YjM2NzdmIC0gS2VybmVsL1N5c3RlbS9Db25zb2xlL0NvbW1hbmQvQWRtaW4vU2VydmljZS9BZGQucG0KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpTZXJ2aWNlOjpBZGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwojIC0tLQoKdXNlIHBhcmVudCBxdyhLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6QmFzZUNvbW1hbmQpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKIyAtLS0KKTsKCnN1YiBDb25maWd1cmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+RGVzY3JpcHRpb24oJ0FkZCBuZXcgc2VydmljZS4nKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ25hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJOYW1lIG9mIHRoZSBuZXcgc2VydmljZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdjcml0aWNhbGl0eScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkNyaXRpY2FsaXR5IG9mIHRoZSBuZXcgc2VydmljZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndHlwZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlR5cGUgb2YgdGhlIG5ldyBzZXJ2aWNlLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiMgLS0tCiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdwYXJlbnQtbmFtZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlBhcmVudCBzZXJ2aWNlIG5hbWUuIElmIGdpdmVuLCB0aGUgbmV3IHNlcnZpY2Ugd2lsbCBiZSBhIHN1YnNlcnZpY2Ugb2YgdGhlIGdpdmVuIHBhcmVudC4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnY29tbWVudCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkNvbW1lbnQgZm9yIHRoZSBuZXcgc2VydmljZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8uKi9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgR2V0IGFsbCBzZXJ2aWNlcy4KICAgICRTZWxmLT57TmFtZX0gPSAkU2VsZi0+R2V0T3B0aW9uKCduYW1lJyk7CiAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlUmV2ZXJzZSA9IHJldmVyc2UgJVNlcnZpY2VMaXN0OwoKICAgICRTZWxmLT57UGFyZW50TmFtZX0gPSAkU2VsZi0+R2V0T3B0aW9uKCdwYXJlbnQtbmFtZScpOwogICAgaWYgKCAkU2VsZi0+e1BhcmVudE5hbWV9ICkgewoKICAgICAgICAjIENoZWNrIGlmIFBhcmVudCBzZXJ2aWNlIGV4aXN0cy4KICAgICAgICAkU2VsZi0+e1BhcmVudElEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VsZi0+e1BhcmVudE5hbWV9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgIGRpZSAiUGFyZW50IHNlcnZpY2UgJFNlbGYtPntQYXJlbnROYW1lfSBkb2VzIG5vdCBleGlzdC5cbiIgaWYgISRTZWxmLT57UGFyZW50SUR9OwoKICAgICAgICAjIENoZWNrIGlmIFBhcmVudDo6Q2hpbGQgc2VydmljZSBjb21iaW5hdGlvbiBleGlzdHMuCiAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlbGYtPntQYXJlbnROYW1lfSAuICc6OicgLiAkU2VsZi0+e05hbWV9OwogICAgICAgIGRpZSAiU2VydmljZSAnJFNlcnZpY2VOYW1lJyBhbHJlYWR5IGV4aXN0cyFcbiIgaWYgJFJldmVyc2V7JFNlcnZpY2VOYW1lfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIENoZWNrIGlmIHNlcnZpY2UgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgZGllICJTZXJ2aWNlICckU2VsZi0+e05hbWV9JyBhbHJlYWR5IGV4aXN0cyFcbiIgaWYgJFJldmVyc2V7ICRTZWxmLT57TmFtZX0gfTsKICAgIH0KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgIG15ICVDcml0aWNhbGl0eSA9ICV7ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9IH07CgogICAgJFNlbGYtPntDcml0aWNhbGl0eX0gPSAkQ3JpdGljYWxpdHl7ICRTZWxmLT5HZXRPcHRpb24oJ2NyaXRpY2FsaXR5JykgfTsKCiAgICBpZiAoICEkU2VsZi0+e0NyaXRpY2FsaXR5fSApIHsKICAgICAgICBkaWUgIkNyaXRpY2FsaXR5ICciIC4gJFNlbGYtPkdldE9wdGlvbignY3JpdGljYWxpdHknKSAuICInIGRvZXMgbm90IGV4aXN0LlxuIjsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlIHR5cGUgbGlzdAogICAgbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwoKICAgIG15ICVTZXJ2aWNlVHlwZSA9IHJldmVyc2UgJXskU2VydmljZVR5cGVMaXN0fTsKCiAgICAkU2VsZi0+e1R5cGVJRH0gPSAkU2VydmljZVR5cGV7ICRTZWxmLT5HZXRPcHRpb24oJ3R5cGUnKSB9OwoKICAgIGlmICggISRTZWxmLT57VHlwZUlEfSApIHsKICAgICAgICBkaWUgIlR5cGUgJyIgLiAkU2VsZi0+R2V0T3B0aW9uKCd0eXBlJykgLiAiJyBkb2VzIG5vdCBleGlzdC5cbiI7CiAgICB9CiMgLS0tCgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkFkZGluZyBhIG5ldyBzZXJ2aWNlLi4uPC95ZWxsb3c+XG4iKTsKCiAgICAjIGFkZCBzZXJ2aWNlCiAgICBpZiAoCiAgICAgICAgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VBZGQoCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZWxmLT57TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICRTZWxmLT5HZXRPcHRpb24oJ2NvbW1lbnQnKSwKICAgICAgICAgICAgUGFyZW50SUQgPT4gJFNlbGYtPntQYXJlbnRJRH0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlbGYtPntUeXBlSUR9LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkU2VsZi0+e0NyaXRpY2FsaXR5fSwKIyAtLS0KICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCJDYW4ndCBhZGQgc2VydmljZS4iKTsKICAgICAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlRXJyb3IoKTsKICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5Eb25lLjwvZ3JlZW4+XG4iKTsKICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpMYW5ndWFnZScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OlNlcnZpY2UKCj1oZWFkMSBERVNDUklQVElPTgoKU2VydmljZSBiYWNrZW5kIGZvciB0aGUgc2VydmljZSBsaW5rIG9iamVjdC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRMaW5rT2JqZWN0U2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIExpbmtMaXN0V2l0aERhdGEoKQoKZmlsbCB1cCB0aGUgbGluayBsaXN0IHdpdGggZGF0YQoKICAgICRTdWNjZXNzID0gJExpbmtPYmplY3RCYWNrZW5kLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIExpbmtMaXN0ID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtMaXN0V2l0aERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTGlua0xpc3QgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGxpbmsgbGlzdAogICAgaWYgKCByZWYgJFBhcmFte0xpbmtMaXN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdMaW5rTGlzdCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0gfSApIHsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0gfSApIHsKCiAgICAgICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIGlkIGZyb20gaGFzaCBpZiBubyBzZXJ2aWNlIGRhdGEgd2FzIGZvdW5kCiAgICAgICAgICAgICAgICBpZiAoICElU2VydmljZURhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0tPnskU2VydmljZUlEfTsKICAgICAgICAgICAgICAgICAgICBuZXh0IFNFUlZJQ0VJRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0tPnskU2VydmljZUlEfSA9IFwlU2VydmljZURhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBPYmplY3RQZXJtaXNzaW9uKCkKCmNoZWNrcyByZWFkIHBlcm1pc3Npb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IGFuZCBVc2VySUQuCgogICAgJFBlcm1pc3Npb24gPSAkTGlua09iamVjdC0+T2JqZWN0UGVybWlzc2lvbigKICAgICAgICBPYmplY3QgID0+ICdTZXJ2aWNlJywKICAgICAgICBLZXkgICAgID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdFBlcm1pc3Npb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEtleSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbW9kdWxlIHJlZ2lzdHJ5IG9mIEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICBteSAkTW9kdWxlUmVnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudElUU01TZXJ2aWNlWm9vbX07CgogICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzIGlmIGZyb250ZW5kIG1vZHVsZSBpcyBub3QgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkTW9kdWxlUmVnOwoKICAgICMgZ3JhbnQgYWNjZXNzIGlmIG1vZHVsZSBwZXJtaXNzb24gaGFzIG5vIEdyb3VwIG9yIEdyb3VwUm8gZGVmaW5lZAogICAgaWYgKCAhJE1vZHVsZVJlZy0+e0dyb3VwUm99ICYmICEkTW9kdWxlUmVnLT57R3JvdXB9ICkgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIFBFUk1JU1NJT046CiAgICBmb3IgbXkgJFBlcm1pc3Npb24gKHF3KEdyb3VwUm8gR3JvdXApKSB7CgogICAgICAgIG5leHQgUEVSTUlTU0lPTiBpZiAhJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufTsKICAgICAgICBuZXh0IFBFUk1JU1NJT04gaWYgcmVmICRNb2R1bGVSZWctPnskUGVybWlzc2lvbn0gbmUgJ0FSUkFZJzsKCiAgICAgICAgZm9yIG15ICRHcm91cCAoIEB7ICRNb2R1bGVSZWctPnskUGVybWlzc2lvbn0gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBncm91cCBpZAogICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgICAgICAgICBteSAkVHlwZTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgKSB7CiAgICAgICAgICAgICAgICAkVHlwZSA9ICdybyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXAnICkgewogICAgICAgICAgICAgICAgJFR5cGUgPSAncncnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgICAgICAgICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBncmFudCBhY2Nlc3MgaWYgYWdlbnQgaXMgYSBtZW1iZXIgaW4gdGhlIGdyb3VwCiAgICAgICAgICAgIHJldHVybiAxIGlmICRHcm91cHN7JEdyb3VwSUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCj1oZWFkMiBPYmplY3REZXNjcmlwdGlvbkdldCgpCgpyZXR1cm4gYSBoYXNoIG9mIG9iamVjdCBkZXNjcmlwdGlvbnMKClJldHVybgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiU2VydmljZSBTZXJ2aWNlTmFtZSIsCiAgICAgICAgTG9uZyAgID0+ICJTZXJ2aWNlIFBhcmVudFNlcnZpY2U6OlNlcnZpY2VOYW1lIiwKICAgICk7CgogICAgJURlc2NyaXB0aW9uID0gJExpbmtPYmplY3QtPk9iamVjdERlc2NyaXB0aW9uR2V0KAogICAgICAgIEtleSAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0RGVzY3JpcHRpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0IEtleSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRTZXJ2aWNlU3RyZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdTZXJ2aWNlJyk7CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIG15ICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJFNlcnZpY2VTdHJnLAogICAgICAgIExvbmcgICA9PiAkU2VydmljZVN0cmcsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb24gaWYgJFBhcmFte01vZGV9ICYmICRQYXJhbXtNb2RlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBJbmNpZGVudFN0YXRlID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISVTZXJ2aWNlOwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICRTZXJ2aWNlU3RyZyAuICIgJyRTZXJ2aWNle05hbWVTaG9ydH0nIiwKICAgICAgICBMb25nICAgPT4gJFNlcnZpY2VTdHJnIC4gIiAnJFNlcnZpY2V7TmFtZX0nIiwKICAgICk7CgogICAgcmV0dXJuICVEZXNjcmlwdGlvbjsKfQoKPWhlYWQyIE9iamVjdFNlYXJjaCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzCgpSZXR1cm5zOgoKICAgICRTZWFyY2hMaXN0ID0gewogICAgICAgIE5PVExJTktFRCA9PiB7CiAgICAgICAgICAgIFNvdXJjZSA9PiB7CiAgICAgICAgICAgICAgICAxMiAgPT4gJERhdGFPZkl0ZW0xMiwKICAgICAgICAgICAgICAgIDIxMiA9PiAkRGF0YU9mSXRlbTIxMiwKICAgICAgICAgICAgICAgIDMzMiA9PiAkRGF0YU9mSXRlbTMzMiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfTsKCiAgICAkU2VhcmNoTGlzdCA9ICRMaW5rT2JqZWN0QmFja2VuZC0+T2JqZWN0U2VhcmNoKAogICAgICAgIFNlYXJjaFBhcmFtcyA9PiAkSGFzaFJlZiwgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgcGFyYW1zCiAgICAkUGFyYW17U2VhcmNoUGFyYW1zfSB8fD0ge307CgogICAgIyBhZGQgd2lsZGNhcmRzCiAgICBteSAlU2VhcmNoOwogICAgaWYgKCAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e05hbWV9ICkgewogICAgICAgICRTZWFyY2h7TmFtZX0gPSAnKicgLiAkUGFyYW17U2VhcmNoUGFyYW1zfS0+e05hbWV9IC4gJyonOwogICAgfQoKICAgICMgc2VhcmNoIHRoZSBzZXJ2aWNlcwogICAgbXkgQFNlcnZpY2VJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlU2VhcmNoKAogICAgICAgICV7ICRQYXJhbXtTZWFyY2hQYXJhbXN9IH0sCiAgICAgICAgJVNlYXJjaCwKICAgICAgICBMaW1pdCAgPT4gNTAsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlU2VhcmNoTGlzdDsKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEIChAU2VydmljZUlEcykgewoKICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEKICAgICAgICBteSAlU2VydmljZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IFNFUlZJQ0VJRCBpZiAhJVNlcnZpY2VEYXRhOwoKICAgICAgICAjIGFkZCBzZXJ2aWNlIGRhdGEKICAgICAgICAkU2VhcmNoTGlzdHtOT1RMSU5LRUR9LT57U291cmNlfS0+eyRTZXJ2aWNlSUR9ID0gXCVTZXJ2aWNlRGF0YTsKICAgIH0KCiAgICByZXR1cm4gXCVTZWFyY2hMaXN0Owp9Cgo9aGVhZDIgTGlua0FkZFByZSgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgTGlua0FkZFBvc3QoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQb3N0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIExpbmtEZWxldGVQcmUoKQoKbGluayBkZWxldGUgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rRGVsZXRlUHJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIExpbmtEZWxldGVQb3N0KCkKCmxpbmsgZGVsZXRlIHBvc3QgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGR5bmFtaWMgaW5jaWRlbnQgY2FsY3VsYXRpb24gaXMgcmVzZXQgYWZ0ZXIKICAgICMgdW5saW5raW5nIGEgQ0kgd2hpY2ggaGFzIGJlZW4gaW4gYW4gaW5jaWRlbnQgc3RhdGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgS2V5ICAgICAgID0+ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycsCiAgICAgICAgVmFsdWUgICAgID0+ICcnLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZSAtIEM8Y3JpdGljYWxpdHk+LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gbGliCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkSVRTTUNJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBBbGxvY2F0ZUxpc3QoKQoKcmV0dXJuIGEgdHdvIGRpbWVuc2lvbmFsIGhhc2ggcmVmZXJlbmNlIG9mIGFsbG9jYXRpb25zCgogICAgbXkgJExpc3RSZWYgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpDPCRMaXN0UmVmPiBpcyBzb21ldGhpbmcgbGlrZQoKICAgICRMaXN0UmV0ID0gewogICAgICAgICczIG5vcm1hbCcgPT4gewogICAgICAgICAgICAnMSB2ZXJ5IGxvdycgPT4gMSwKICAgICAgICAgICAgJzMgbm9ybWFsJyAgID0+IDIsCiAgICAgICAgICAgICc0IGhpZ2gnICAgICA9PiAzLAogICAgICAgIH0sCiAgICAgICAgJzUgdmVyeSBoaWdoJyA9PiB7CiAgICAgICAgICAgICcyIGxvdycgICAgPT4gMywKICAgICAgICAgICAgJzMgbm9ybWFsJyA9PiA0LAogICAgICAgICAgICAnNCBoaWdoJyAgID0+IDUsCiAgICAgICAgfSwKICAgIH07CgptZWFuaW5nIHRoYXQgdGhlIEM8Q3JpdGljYWxpdHk+ICczIG5vcm1hbCcgYW5kIHRoZSBJbXBhY3QgJzEgdmVyeSBsb3cnIHN1Z2dlc3QgdGhlIFByaW9yaXR5SUQgJzEnLgoKPWN1dAoKc3ViIEFsbG9jYXRlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGNyaXRpY2FsaXR5LCBpbXBhY3QsIHByaW9yaXR5X2lkIEZST00gY2lwX2FsbG9jYXRlJywKICAgICk7CgogICAgIyByZXN1bHQgbGlzdAogICAgbXkgJUFsbG9jYXRlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFsbG9jYXRlRGF0YXsgJFJvd1sxXSB9eyAkUm93WzBdIH0gPSAkUm93WzJdOwogICAgfQoKICAgIHJldHVybiBcJUFsbG9jYXRlRGF0YTsKfQoKPWhlYWQyIEFsbG9jYXRlVXBkYXRlKCkKCnVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBvZiBDPGNyaXRpY2FsaXR5PiwgaW1wYWN0IGFuZCBwcmlvcml0eQoKICAgIG15ICRUcnVlID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJERhdGFSZWYsICAjIDJEIGhhc2ggcmVmZXJlbmNlCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFsbG9jYXRlRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgYWxsb2NhdGUgZGF0YSBpcyBhIGhhc2ggcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBhbGxvY2F0ZSBkYXRhIGlzIGEgMkQgaGFzaCByZWZlcmVuY2UKICAgIElNUEFDVDoKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRQYXJhbXtBbGxvY2F0ZURhdGF9IH0gKSB7CgogICAgICAgIG5leHQgSU1QQUNUIGlmIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9IGVxICdIQVNIJzsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGFsbG9jYXRpb25zCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oIFNRTCA9PiAnREVMRVRFIEZST00gY2lwX2FsbG9jYXRlJyApOwoKICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRJbXBhY3QgKCBzb3J0IGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9IH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgcHJpb3JpdHkKICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9uCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY2lwX2FsbG9jYXRlICcKICAgICAgICAgICAgICAgICAgICAuICcoY3JpdGljYWxpdHksIGltcGFjdCwgcHJpb3JpdHlfaWQsICcKICAgICAgICAgICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAgICAgICAgIC4gJyg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgICAgIFwkQ3JpdGljYWxpdHksIFwkSW1wYWN0LCBcJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFByaW9yaXR5QWxsb2NhdGlvbkdldCgpCgpyZXR1cm4gdGhlIHByaW9yaXR5IGlkIG9mIGEgQzxjcml0aWNhbGl0eT4gYW5kIGFuIGltcGFjdAoKICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgIEltcGFjdCAgICAgID0+ICczIG5vcm1hbCcsCiAgICApOwoKPWN1dAoKc3ViIFByaW9yaXR5QWxsb2NhdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDcml0aWNhbGl0eSBJbXBhY3QpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHByaW9yaXR5IGlkIGZyb20gZGIKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIHByaW9yaXR5X2lkIEZST00gY2lwX2FsbG9jYXRlICcKICAgICAgICAgICAgLiAnV0hFUkUgY3JpdGljYWxpdHkgPSA/IEFORCBpbXBhY3QgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q3JpdGljYWxpdHl9LCBcJFBhcmFte0ltcGFjdH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHJlc3VsdAogICAgbXkgJFByaW9yaXR5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcmlvcml0eUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFByaW9yaXR5SUQ7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAwZDE0NmU5MjRkMzQ1ZWI4OTA1MTM0Yzk4NmE0MjYzMTA0YzcxYmJjIC0gS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIChxdyg6YWxsKSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UgLSBzZXJ2aWNlIGxpYgoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgc2VydmljZSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnU2VydmljZSc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSA2MCAqIDYwICogMjQgKiAyMDsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmIH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9ID0gJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX07CiMgLS0tCgogICAgIyBsb2FkIGdlbmVyYXRvciBwcmVmZXJlbmNlcyBtb2R1bGUKICAgIG15ICRHZW5lcmF0b3JNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NlcnZpY2U6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U6OlByZWZlcmVuY2VzREInOwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRHZW5lcmF0b3JNb2R1bGUpICkgewogICAgICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9ID0gJEdlbmVyYXRvck1vZHVsZS0+bmV3KCk7CiAgICB9CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICRTZWxmLT57REJPYmplY3R9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CiMgLS0tCgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgU2VydmljZUxpc3QoKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHNlcnZpY2VzCgogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLCAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIHJlYWQgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdTZXJ2aWNlTGlzdDo6VmFsaWQ6OicgLiAkUGFyYW17VmFsaWR9OwoKICAgIGlmICggJFBhcmFte1ZhbGlkfSAmJiBkZWZpbmVkICRQYXJhbXtLZWVwQ2hpbGRyZW59ICYmICRQYXJhbXtLZWVwQ2hpbGRyZW59IGVxICcxJyApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJzo6S2VlcENoaWxkcmVuOjonIC4gJFBhcmFte0tlZXBDaGlsZHJlbn07CiAgICB9CgogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQgRlJPTSBzZXJ2aWNlJywKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VydmljZUxpc3Q7CiAgICBteSAlU2VydmljZVZhbGlkTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTZXJ2aWNlTGlzdHsgJFJvd1swXSB9ICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlVmFsaWRMaXN0eyAkUm93WzBdIH0gPSAkUm93WzJdOwogICAgfQoKICAgIGlmICggISRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVTZXJ2aWNlTGlzdCBpZiAhJFBhcmFte1ZhbGlkfTsKICAgIH0KCiAgICAjIGdldCB2YWxpZCBpZHMKICAgIG15IEBWYWxpZElEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICMgZHVwbGljYXRlIHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0VG1wID0gJVNlcnZpY2VMaXN0OwoKICAgICMgYWRkIHN1ZmZpeCBmb3IgY29ycmVjdCBzb3J0aW5nCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3RUbXAgKSB7CiAgICAgICAgJFNlcnZpY2VMaXN0VG1weyRTZXJ2aWNlSUR9IC49ICc6Oic7CiAgICB9CgogICAgbXkgJVNlcnZpY2VJbnZhbGlkTGlzdDsKICAgIFNFUlZJQ0VJRDoKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCB7ICRTZXJ2aWNlTGlzdFRtcHskYX0gY21wICRTZXJ2aWNlTGlzdFRtcHskYn0gfSBrZXlzICVTZXJ2aWNlTGlzdFRtcCApCiAgICB7CgogICAgICAgIG15ICRWYWxpZCA9IHNjYWxhciBncmVwIHsgJF8gZXEgJFNlcnZpY2VWYWxpZExpc3R7JFNlcnZpY2VJRH0gfSBAVmFsaWRJRHM7CgogICAgICAgIG5leHQgU0VSVklDRUlEIGlmICRWYWxpZDsKCiAgICAgICAgJFNlcnZpY2VJbnZhbGlkTGlzdHsgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IH0gPSAxOwogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICB9CgogICAgIyBkZWxldGUgaW52YWxpZCBzZXJ2aWNlcyBhbmQgY2hpbGRyZW4KICAgIGlmICggIWRlZmluZWQgJFBhcmFte0tlZXBDaGlsZHJlbn0gfHwgISRQYXJhbXtLZWVwQ2hpbGRyZW59ICkgewogICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdCApIHsKCiAgICAgICAgICAgIElOVkFMSUROQU1FOgogICAgICAgICAgICBmb3IgbXkgJEludmFsaWROYW1lICggc29ydCBrZXlzICVTZXJ2aWNlSW52YWxpZExpc3QgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPX4gbXsgXEEgXFEkSW52YWxpZE5hbWVcRSA6OiB9eG1zICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAgICAgbGFzdCBJTlZBTElETkFNRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlU2VydmljZUxpc3QsCiAgICApOwoKICAgIHJldHVybiAlU2VydmljZUxpc3Q7Cn0KCj1oZWFkMiBTZXJ2aWNlTGlzdEdldCgpCgpyZXR1cm4gYSBsaXN0IG9mIHNlcnZpY2VzIHdpdGggdGhlIGNvbXBsZXRlIGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgZWFjaCBzZXJ2aWNlCgogICAgbXkgJFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFZhbGlkICA9PiAwLCAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJucwoKICAgICRTZXJ2aWNlTGlzdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIFNlcnZpY2VJRCAgPT4gMSwKICAgICAgICAgICAgUGFyZW50SUQgICA9PiAwLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdNeVNlcnZpY2UnLAogICAgICAgICAgICBOYW1lU2hvcnQgID0+ICdNeVNlcnZpY2UnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJ1NvbWUgQ29tbWVudCcKICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAnMjAxMS0wMi0wOCAxNTowODowMCcsCiAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMTEtMDYtMTEgMTc6MjI6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICAgICAgID0+IDE2LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdCYWNrZW5kJywKICAgICAgICAgICAgQ3JpdGljYWxpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IDEsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBTZXJ2aWNlSUQgID0+IDIsCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gMSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTXlTZXJ2aWNlOjpNeVN1YlNlcnZpY2UnLAogICAgICAgICAgICBOYW1lU2hvcnQgID0+ICdNeVN1YlNlcnZpY2UnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJ1NvbWUgQ29tbWVudCcKICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAnMjAxMS0wMi0wOCAxNTowODowMCcsCiAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMTEtMDYtMTEgMTc6MjI6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICAgICAgID0+IDE2LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdCYWNrZW5kJywKICAgICAgICAgICAgQ3JpdGljYWxpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IDEsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgIyAuLi4KICAgIF07Cgo9Y3V0CgpzdWIgU2VydmljZUxpc3RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlZCByZXN1bHRzCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VMaXN0R2V0OjpWYWxpZDo6JyAuICRQYXJhbXtWYWxpZH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgIyBjcmVhdGUgU1FMIHF1ZXJ5CiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIC4gIiwgdHlwZV9pZCwgY3JpdGljYWxpdHkgIgojIC0tLQogICAgICAgIC4gJ0ZST00gc2VydmljZSc7CgogICAgaWYgKCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRTUUwgLj0gJyBXSEVSRSB2YWxpZF9pZCBJTiAoJyAuIGpvaW4gJywgJywKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkgLiAnKSc7CiAgICB9CgogICAgJFNRTCAuPSAnIE9SREVSIEJZIG5hbWUnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJFNRTCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAU2VydmljZUxpc3Q7CiAgICBteSAlU2VydmljZU5hbWUySUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlU2VydmljZURhdGE7CiAgICAgICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gID0gJFJvd1swXTsKICAgICAgICAkU2VydmljZURhdGF7TmFtZX0gICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbMl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NvbW1lbnR9ICAgID0gJFJvd1szXSB8fCAnJzsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzRdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNV07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s2XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzddOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgLS0tCgogICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YSB0byBzZXJ2aWNlIGxpc3QKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgXCVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBidWlsZCBzZXJ2aWNlIGlkIGxvb2t1cCBoYXNoCiAgICAgICAgJFNlcnZpY2VOYW1lMklEeyAkU2VydmljZURhdGF7TmFtZX0gfSA9ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9OwogICAgfQoKICAgIGZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlTGlzdCkgewoKICAgICAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnRpZAogICAgICAgICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0gPSAkU2VydmljZURhdGEtPntOYW1lfTsKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YS0+e05hbWV9ID1+IG17IFxBICguKikgOjogKC4rPykgXHogfXhtcyApIHsKICAgICAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkMTsKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57TmFtZVNob3J0fSA9ICQyOwogICAgICAgICAgICAkU2VydmljZURhdGEtPntQYXJlbnRJRH0gID0gJFNlcnZpY2VOYW1lMklEeyRQYXJlbnROYW1lfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICApOwoKICAgICAgICAjIG1lcmdlIGhhc2gKICAgICAgICBpZiAoJVByZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSA9ICggJXskU2VydmljZURhdGF9LCAlUHJlZmVyZW5jZXMgKTsKICAgICAgICB9CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAjIGdldCBjdXJyZW50IGluY2lkZW50IHN0YXRlLCBjYWxjdWxhdGVkIGZyb20gcmVsYXRlZCBjb25maWcgaXRlbXMgYW5kIGNoaWxkIHNlcnZpY2VzCiAgICAgICAgbXkgJU5ld1NlcnZpY2VEYXRhID0gJFNlbGYtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+ICRTZXJ2aWNlRGF0YSwKICAgICAgICAgICAgUHJlZmVyZW5jZXMgPT4gXCVQcmVmZXJlbmNlcywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkU2VydmljZURhdGEgPSBcJU5ld1NlcnZpY2VEYXRhOwojIC0tLQogICAgfQoKICAgIGlmIChAU2VydmljZUxpc3QpIHsKCiAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFxAU2VydmljZUxpc3QsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gXEBTZXJ2aWNlTGlzdDsKfQoKPWhlYWQyIFNlcnZpY2VHZXQoKQoKcmV0dXJuIGEgc2VydmljZSBhcyBoYXNoCgpSZXR1cm4KICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9CiAgICAkU2VydmljZURhdGF7UGFyZW50SUR9CiAgICAkU2VydmljZURhdGF7TmFtZX0KICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9CiAgICAkU2VydmljZURhdGF7VmFsaWRJRH0KICAgICRTZXJ2aWNlRGF0YXtDb21tZW50fQogICAgJFNlcnZpY2VEYXRhe0NyZWF0ZVRpbWV9CiAgICAkU2VydmljZURhdGF7Q3JlYXRlQnl9CiAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0KICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0KICAgICRTZXJ2aWNlRGF0YXtUeXBlfQogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSAgICAjIE9ubHkgaWYgSW5jaWRlbnRTdGF0ZSBpcyAxCiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlfSAgICAgICMgT25seSBpZiBJbmNpZGVudFN0YXRlIGlzIDEKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSAgIyBPbmx5IGlmIEluY2lkZW50U3RhdGUgaXMgMQoKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gMTIzLAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwgIyBPcHRpb25hbCwgcmV0dXJucyBDdXJJbmNpU3RhdGUgZXRjLgogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CiMgLS0tCgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTo6U3ViU2VydmljZScsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGVpdGhlciBTZXJ2aWNlSUQgb3IgTmFtZSBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggU2VydmljZUlEIGFuZCBOYW1lIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSAmJiAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciBTZXJ2aWNlSUQgT1IgTmFtZSAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rdXAgdGhlIFNlcnZpY2VJRAogICAgaWYgKCAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlZCByZXN1bHRzCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VHZXQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgIyBhZGQgdGhlIEluY2lkZW50U3RhdGUgcGFyYW1ldGVyIHRvIHRoZSBjYWNoZSBrZXkKICAgICRQYXJhbXtJbmNpZGVudFN0YXRlfSB8fD0gMDsKICAgICRDYWNoZUtleSAuPSAnOjpJbmNpZGVudFN0YXRlOjonIC4gJFBhcmFte0luY2lkZW50U3RhdGV9OwojIC0tLQogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgc2VydmljZSBmcm9tIGRiCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdTRUxFQ1QgaWQsIG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgLiAiLCB0eXBlX2lkLCBjcml0aWNhbGl0eSAiCiMgLS0tCiAgICAgICAgICAgIC4gJ0ZST00gc2VydmljZSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VydmljZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSAgPSAkUm93WzBdOwogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VEYXRhe1ZhbGlkSUR9ICAgID0gJFJvd1syXTsKICAgICAgICAkU2VydmljZURhdGF7Q29tbWVudH0gICAgPSAkUm93WzNdIHx8ICcnOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s1XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzZdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbN107CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAkU2VydmljZURhdGF7VHlwZUlEfSAgICAgID0gJFJvd1s4XTsKICAgICAgICAkU2VydmljZURhdGF7Q3JpdGljYWxpdHl9ID0gJFJvd1s5XSB8fCAnJzsKIyAtLS0KICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UKICAgIGlmICggISRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBTZXJ2aWNlSUQgKCRQYXJhbXtTZXJ2aWNlSUR9KSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHNob3J0IG5hbWUgYW5kIHBhcmVudGlkCiAgICAkU2VydmljZURhdGF7TmFtZVNob3J0fSA9ICRTZXJ2aWNlRGF0YXtOYW1lfTsKICAgIGlmICggJFNlcnZpY2VEYXRhe05hbWV9ID1+IG17IFxBICguKikgOjogKC4rPykgXHogfXhtcyApIHsKICAgICAgICAkU2VydmljZURhdGF7TmFtZVNob3J0fSA9ICQyOwoKICAgICAgICAjIGxvb2t1cCBwYXJlbnQKICAgICAgICBteSAkU2VydmljZUlEID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIE5hbWUgPT4gJDEsCiAgICAgICAgKTsKICAgICAgICAkU2VydmljZURhdGF7UGFyZW50SUR9ID0gJFNlcnZpY2VJRDsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlIHByZWZlcmVuY2VzCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17U2VydmljZUlEfSwKICAgICk7CgogICAgIyBtZXJnZSBoYXNoCiAgICBpZiAoJVByZWZlcmVuY2VzKSB7CiAgICAgICAgJVNlcnZpY2VEYXRhID0gKCAlU2VydmljZURhdGEsICVQcmVmZXJlbmNlcyApOwogICAgfQojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBpZiAoICRQYXJhbXtJbmNpZGVudFN0YXRlfSApIHsKICAgICAgICAjIGdldCBjdXJyZW50IGluY2lkZW50IHN0YXRlLCBjYWxjdWxhdGVkIGZyb20gcmVsYXRlZCBjb25maWcgaXRlbXMgYW5kIGNoaWxkIHNlcnZpY2VzCiAgICAgICAgJVNlcnZpY2VEYXRhID0gJFNlbGYtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IFwlUHJlZmVyZW5jZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CiMgLS0tCgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJVNlcnZpY2VEYXRhLAogICAgKTsKCiAgICByZXR1cm4gJVNlcnZpY2VEYXRhOwp9Cgo9aGVhZDIgU2VydmljZUxvb2t1cCgpCgpyZXR1cm4gYSBzZXJ2aWNlIG5hbWUgYW5kIGlkCgogICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnU2VydmljZTo6U3ViU2VydmljZScsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTZXJ2aWNlTG9va3VwOjpJRDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBuYW1lIEZST00gc2VydmljZSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRSZXN1bHQgPSAnJzsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFJlc3VsdCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+ICRSZXN1bHQsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmIGRlZmluZWQgJENhY2hlOwoKICAgICAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBsb29rdXAKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFJlc3VsdCA9ICcnOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUmVzdWx0ID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJlc3VsdCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgIH0KfQoKPWhlYWQyIFNlcnZpY2VBZGQoKQoKYWRkIGEgc2VydmljZQoKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICBOYW1lICAgICA9PiAnU2VydmljZSBOYW1lJywKICAgICAgICBQYXJlbnRJRCA9PiAxLCAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICBDb21tZW50ICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQgVHlwZUlEIENyaXRpY2FsaXR5KSkgewojIC0tLQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBjb21tZW50CiAgICAkUGFyYW17Q29tbWVudH0gfHw9ICcnOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgbmFtZQogICAgaWYgKCAkUGFyYW17TmFtZX0gPX4gbXsgOjogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGFkZCBzZXJ2aWNlISBJbnZhbGlkIFNlcnZpY2UgbmFtZSAnJFBhcmFte05hbWV9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIGZ1bGwgbmFtZQogICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJhbXtOYW1lfTsKCiAgICAjIGdldCBwYXJlbnQgbmFtZQogICAgaWYgKCAkUGFyYW17UGFyZW50SUR9ICkgewogICAgICAgIG15ICRQYXJlbnROYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17UGFyZW50SUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCRQYXJlbnROYW1lKSB7CiAgICAgICAgICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyZW50TmFtZSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXN0aW5nIHNlcnZpY2UKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICRFeGlzdHM7CiAgICB3aGlsZSAoICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRFeGlzdHMgPSAxOwogICAgfQoKICAgICMgYWRkIHNlcnZpY2UgdG8gZGF0YWJhc2UKICAgIGlmICgkRXhpc3RzKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBIHNlcnZpY2Ugd2l0aCB0aGUgbmFtZSBhbmQgcGFyZW50ICckUGFyYW17RnVsbE5hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2UgJwojICAgICAgICAgICAgLiAnKG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgJwojICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKIyAgICAgICAgQmluZCA9PiBbCiMgICAgICAgICAgICBcJFBhcmFte0Z1bGxOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKIyAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LAojICAgICAgICBdLAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2VydmljZSAnCiAgICAgICAgICAgIC4gJyhuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnksICcKICAgICAgICAgICAgLiAndHlwZV9pZCwgY3JpdGljYWxpdHkpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8sID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1R5cGVJRH0sIFwkUGFyYW17Q3JpdGljYWxpdHl9LAogICAgICAgIF0sCiMgLS0tCiAgICApOwoKICAgICMgZ2V0IHNlcnZpY2UgaWQKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJFNlcnZpY2VJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTZXJ2aWNlSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJFNlcnZpY2VJRDsKfQoKPWhlYWQyIFNlcnZpY2VVcGRhdGUoKQoKdXBkYXRlIGFuIGV4aXN0aW5nIHNlcnZpY2UKCiAgICBteSAkVHJ1ZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgUGFyZW50SUQgID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOYW1lICAgICAgPT4gJ1NlcnZpY2UgTmFtZScsCiAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZUlEIE5hbWUgVmFsaWRJRCBVc2VySUQpKSB7CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQgQ3JpdGljYWxpdHkpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgY29tbWVudAogICAgJFBhcmFte0NvbW1lbnR9IHx8PSAnJzsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBzZXJ2aWNlIG5hbWUKICAgIGlmICggJFBhcmFte05hbWV9ID1+IG17IDo6IH14bXMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgc2VydmljZSEgSW52YWxpZCBTZXJ2aWNlIG5hbWUgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBvbGQgbmFtZSBvZiBzZXJ2aWNlCiAgICBteSAkT2xkU2VydmljZU5hbWUgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRPbGRTZXJ2aWNlTmFtZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IHVwZGF0ZSBzZXJ2aWNlISBTZXJ2aWNlICckUGFyYW17U2VydmljZUlEfScgZG9lcyBub3QgZXhpc3QuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBmdWxsIG5hbWUKICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyYW17TmFtZX07CgogICAgIyBnZXQgcGFyZW50IG5hbWUKICAgIGlmICggJFBhcmFte1BhcmVudElEfSApIHsKCiAgICAgICAgIyBsb29rdXAgc2VydmljZQogICAgICAgIG15ICRQYXJlbnROYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17UGFyZW50SUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkUGFyZW50TmFtZSkgewogICAgICAgICAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmVudE5hbWUgLiAnOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjaywgaWYgc2VsZWN0ZWQgcGFyZW50IHdhcyBhIGNoaWxkIG9mIHRoaXMgc2VydmljZQogICAgICAgIGlmICggJFBhcmFte0Z1bGxOYW1lfSA9fiBteyBcQSAoIFxRJE9sZFNlcnZpY2VOYW1lXEUgKSA6OiB9eG1zICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnQ2FuXCd0IHVwZGF0ZSBzZXJ2aWNlISBJbnZhbGlkIHBhcmVudCB3YXMgc2VsZWN0ZWQuJwogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXN0cyBzZXJ2aWNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtGdWxsTmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKICAgIG15ICRFeGlzdHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRFeGlzdHMgPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIHVwZGF0ZSBzZXJ2aWNlCiAgICBpZiAoJEV4aXN0cykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQSBzZXJ2aWNlIHdpdGggdGhlIG5hbWUgYW5kIHBhcmVudCAnJFBhcmFte0Z1bGxOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKCiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNlcnZpY2UgU0VUIG5hbWUgPSA/LCB2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgJwojICAgICAgICAgICAgLiAnIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8gV0hFUkUgaWQgPSA/JywKIyAgICAgICAgQmluZCA9PiBbCiMgICAgICAgICAgICBcJFBhcmFte0Z1bGxOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKIyAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtTZXJ2aWNlSUR9LAojICAgICAgICBdLAogICAgICAgIFNRTCA9PiAnVVBEQVRFIHNlcnZpY2UgU0VUIG5hbWUgPSA/LCB2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgJwogICAgICAgICAgICAuICcgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPywgdHlwZV9pZCA9ID8sIGNyaXRpY2FsaXR5ID0gPycKICAgICAgICAgICAgLiAnIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17RnVsbE5hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtDcml0aWNhbGl0eX0sIFwkUGFyYW17U2VydmljZUlEfSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICBteSAkTGlrZVNlcnZpY2UgPSAkREJPYmplY3QtPlF1b3RlKCAkT2xkU2VydmljZU5hbWUsICdMaWtlJyApIC4gJzo6JSc7CgogICAgIyBmaW5kIGFsbCBjaGlsZHMKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgTElLRSA/IiwKICAgICAgICBCaW5kID0+IFsgXCRMaWtlU2VydmljZSBdLAogICAgKTsKCiAgICBteSBAQ2hpbGRzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJUNoaWxkOwogICAgICAgICRDaGlsZHtTZXJ2aWNlSUR9ID0gJFJvd1swXTsKICAgICAgICAkQ2hpbGR7TmFtZX0gICAgICA9ICRSb3dbMV07CiAgICAgICAgcHVzaCBAQ2hpbGRzLCBcJUNoaWxkOwogICAgfQoKICAgICMgdXBkYXRlIGNoaWxkcwogICAgZm9yIG15ICRDaGlsZCAoQENoaWxkcykgewogICAgICAgICRDaGlsZC0+e05hbWV9ID1+IHN7IFxBICggXFEkT2xkU2VydmljZU5hbWVcRSApIDo6IH17JFBhcmFte0Z1bGxOYW1lfTo6fXhtczsKICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICdVUERBVEUgc2VydmljZSBTRVQgbmFtZSA9ID8gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2hpbGQtPntOYW1lfSwgXCRDaGlsZC0+e1NlcnZpY2VJRH0gXSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFNlcnZpY2VTZWFyY2goKQoKcmV0dXJuIHNlcnZpY2UgaWRzIGFzIGFuIGFycmF5CgogICAgbXkgQFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goCiAgICAgICAgTmFtZSAgID0+ICdTZXJ2aWNlIE5hbWUnLCAjIChvcHRpb25hbCkKICAgICAgICBMaW1pdCAgPT4gMTIyLCAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEwMDAKICAgICAgICBVc2VySUQgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRHMgICAgICAgPT4gMiwKICAgICAgICBDcml0aWNhbGl0aWVzID0+IFsgJzIgbG93JywgJzMgbm9ybWFsJyBdLAojIC0tLQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGxpbWl0CiAgICAkUGFyYW17TGltaXR9IHx8PSAxMDAwOwoKICAgICMgY3JlYXRlIHNxbCBxdWVyeQogICAgbXkgJFNRTAogICAgICAgID0gIlNFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSl9ICkiOwogICAgbXkgQEJpbmQ7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXtOYW1lfSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtOYW1lfSwgJ0xpa2UnICk7CgogICAgICAgICMgcmVwbGFjZSAqIHdpdGggJSBhbmQgY2xlYW4gdGhlIHN0cmluZwogICAgICAgICRQYXJhbXtOYW1lfSA9fiBzeyBcKisgfXslfXhtc2c7CiAgICAgICAgJFBhcmFte05hbWV9ID1+IHN7ICUrIH17JX14bXNnOwogICAgICAgIG15ICRMaWtlU3RyaW5nID0gJyUnIC4gJFBhcmFte05hbWV9IC4gJyUnOwogICAgICAgIHB1c2ggQEJpbmQsIFwkTGlrZVN0cmluZzsKCiAgICAgICAgJFNRTCAuPSAiIEFORCBuYW1lIExJS0UgPyI7CiAgICB9CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICMgYWRkIHR5cGUgaWRzCiAgICBpZiAoICRQYXJhbXtUeXBlSURzfSAmJiByZWYgJFBhcmFte1R5cGVJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte1R5cGVJRHN9IH0gKSB7CgogICAgICAgICMgcXVvdGUgYXMgaW50ZWdlcgogICAgICAgIGZvciBteSAkVHlwZUlEICggQHsgJFBhcmFte1R5cGVJRHN9IH0gKSB7CiAgICAgICAgICAgICRUeXBlSUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRUeXBlSUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiIEFORCB0eXBlX2lkIElOICgiIC4gam9pbignLCAnLCBAeyAkUGFyYW17VHlwZUlEc30gfSkgLiAiKSAiOwogICAgfQoKICAgICMgYWRkIGNyaXRpY2FsaXRpZXMKICAgIGlmICgkUGFyYW17Q3JpdGljYWxpdGllc30gJiYgcmVmICRQYXJhbXtDcml0aWNhbGl0aWVzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9ICkgewoKICAgICAgICAjIHF1b3RlIGFuZCB3cmFwIGluIHNpbmdsZSBxdW90ZXMKICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICggQHsgJFBhcmFte0NyaXRpY2FsaXRpZXN9IH0gKSB7CiAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICInIiAuICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJENyaXRpY2FsaXR5ICkgLiAiJyI7CiAgICAgICAgfQoKICAgICAgICAkU1FMIC49ICJBTkQgY3JpdGljYWxpdHkgSU4gKCIgLiBqb2luKCcsICcsIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9KSAuICIpICI7CiAgICB9CiMgLS0tCgogICAgJFNRTCAuPSAnIE9SREVSIEJZIG5hbWUnOwoKICAgICMgc2VhcmNoIHNlcnZpY2UgaW4gZGIKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBcQEJpbmQsCiAgICApOwoKICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFNlcnZpY2VMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBAU2VydmljZUxpc3Q7Cn0KCj1oZWFkMiBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgpCgpyZXR1cm5zIGEgbGlzdCBvZiBjdXN0b21lcnVzZXIvc2VydmljZSBtZW1iZXJzCgogICAgU2VydmljZUlEOiBzZXJ2aWNlIGlkCiAgICBDdXN0b21lclVzZXJMb2dpbjogY3VzdG9tZXIgdXNlciBsb2dpbgogICAgRGVmYXVsdFNlcnZpY2VzOiBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlIGRlZmF1bHQgc2VydmljZXMKCiAgICBSZXN1bHQ6IEhBU0ggLT4gcmV0dXJucyBhIGhhc2ggb2Yga2V5ID0+IHNlcnZpY2UgaWQsIHZhbHVlID0+IHNlcnZpY2UgbmFtZQogICAgICAgICAgICBOYW1lIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBuYW1lcwogICAgICAgICAgICBJRCAgIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBpZHMKCiAgICBFeGFtcGxlIChnZXQgc2VydmljZXMgb2YgY3VzdG9tZXIgdXNlcik6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICdUZXN0JywKICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICk7CgogICAgRXhhbXBsZSAoZ2V0IGN1c3RvbWVyIHVzZXIgb2Ygc2VydmljZSk6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkSUQsCiAgICAgICAgUmVzdWx0ICAgID0+ICdIQVNIJywKICAgICk7Cgo9Y3V0CgpzdWIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1Jlc3VsdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFJlc3VsdCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgKG9ubHkgMSBvciAwIGlzIGFsbG93ZWQgdG8gY29ycmVjdGx5IHNldCB0aGUgY2FjaGUga2V5KQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSB8fCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSApIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDA7CiAgICB9CgogICAgIyBnZXQgb3B0aW9ucyBmb3IgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgdW5rbm93biBjdXN0b21lcnMKICAgIG15ICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwogICAgaWYgKAogICAgICAgICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgICYmICRQYXJhbXtEZWZhdWx0U2VydmljZXN9CiAgICAgICAgJiYgISRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgJiYgISRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0KICAgICAgICApCiAgICB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgICMgY2hlY2sgbW9yZSBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTZXJ2aWNlSUR9ICYmICEkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgQ3VzdG9tZXJVc2VyTG9naW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBjYWNoZSBrZXkKICAgIG15ICRDYWNoZUtleSA9ICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDo6JyAuICRQYXJhbXtSZXN1bHR9IC4gJzo6JwogICAgICAgIC4gJ0RlZmF1bHRTZXJ2aWNlczo6JyAuICRQYXJhbXtEZWZhdWx0U2VydmljZXN9IC4gJzo6JzsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJENhY2hlS2V5IC49ICdTZXJ2aWNlSUQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJ0N1c3RvbWVyVXNlckxvZ2luOjonIC4gJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIGlmICggJFBhcmFte1Jlc3VsdH0gZXEgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gQHskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0FSUkFZJzsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZGIgcXVvdGUKICAgIGZvciAoIHNvcnQga2V5cyAlUGFyYW0gKSB7CiAgICAgICAgJFBhcmFteyRffSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXskX30gKTsKICAgIH0KICAgIGZvciAocXcoU2VydmljZUlEKSkgewogICAgICAgICRQYXJhbXskX30gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17JF99LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIHNxbAogICAgbXkgJURhdGE7CiAgICBteSBARGF0YTsKICAgIG15ICRTUUwgPSAnU0VMRUNUIHNjdS5zZXJ2aWNlX2lkLCBzY3UuY3VzdG9tZXJfdXNlcl9sb2dpbiwgcy5uYW1lICcKICAgICAgICAuICcgRlJPTSAnCiAgICAgICAgLiAnIHNlcnZpY2VfY3VzdG9tZXJfdXNlciBzY3UsIHNlcnZpY2UgcycKICAgICAgICAuICcgV0hFUkUgJwogICAgICAgIC4gIiBzLnZhbGlkX2lkIElOICggJHtcKGpvaW4gJywgJywgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCkpfSApIEFORCAiCiAgICAgICAgLiAnIHMuaWQgPSBzY3Uuc2VydmljZV9pZCBBTkQgJzsKCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICRTUUwgLj0gIiBzY3Uuc2VydmljZV9pZCA9ICRQYXJhbXtTZXJ2aWNlSUR9IjsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkU1FMIC49ICIgc2N1LmN1c3RvbWVyX3VzZXJfbG9naW4gPSAnJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSciOwogICAgfQoKICAgICREQk9iamVjdC0+UHJlcGFyZSggU1FMID0+ICRTUUwgKTsKCiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgbXkgJFZhbHVlID0gJyc7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgJERhdGF7ICRSb3dbMV0gfSA9ICRSb3dbMF07CiAgICAgICAgICAgICRWYWx1ZSA9ICRSb3dbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRGF0YXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoCiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufQogICAgICAgICYmICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gbmUgJzxERUZBVUxUPicKICAgICAgICAmJiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfQogICAgICAgICYmICFrZXlzKCVEYXRhKQogICAgICAgICkKICAgIHsKICAgICAgICAlRGF0YSA9ICRTZWxmLT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgICAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICAgICApOwogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgaWYgKCAkUGFyYW17UmVzdWx0fSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJURhdGEsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJURhdGE7CiAgICB9CiAgICBpZiAoICRQYXJhbXtSZXN1bHR9IGVxICdOYW1lJyApIHsKICAgICAgICBARGF0YSA9IHZhbHVlcyAlRGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBEYXRhID0ga2V5cyAlRGF0YTsKICAgIH0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQERhdGEsCiAgICApOwogICAgcmV0dXJuIEBEYXRhOwp9Cgo9aGVhZDIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgpCgp0byBhZGQgYSBtZW1iZXIgdG8gYSBzZXJ2aWNlCgppZiAnQWN0aXZlJyBpcyAwLCB0aGUgY3VzdG9tZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzZXJ2aWNlCgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJ1Rlc3QxJywKICAgICAgICBTZXJ2aWNlSUQgICAgICAgICA9PiA2LAogICAgICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEN1c3RvbWVyVXNlckxvZ2luIFNlcnZpY2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBkZWxldGUgZXhpc3RpbmcgcmVsYXRpb24KICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgY3VzdG9tZXJfdXNlcl9sb2dpbiA9ID8gQU5EIHNlcnZpY2VfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0sIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgKTsKCiAgICAjIHJldHVybiBpZiByZWxhdGlvbiBpcyBub3QgYWN0aXZlCiAgICBpZiAoICEkUGFyYW17QWN0aXZlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IHJlbGF0aW9uCiAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgJwogICAgICAgICAgICAuICcoY3VzdG9tZXJfdXNlcl9sb2dpbiwgc2VydmljZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59LCBcJFBhcmFte1NlcnZpY2VJRH0sIFwkUGFyYW17VXNlcklEfSBdCiAgICApOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJFN1Y2Nlc3M7Cn0KCj1oZWFkMiBTZXJ2aWNlUHJlZmVyZW5jZXNTZXQoKQoKc2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKCiAgICAkU2VydmljZU9iamVjdC0+U2VydmljZVByZWZlcmVuY2VzU2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgS2V5ICAgICAgID0+ICdVc2VyQ29tbWVudCcsCiAgICAgICAgVmFsdWUgICAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VQcmVmZXJlbmNlc1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoJVBhcmFtKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFNlcnZpY2VQcmVmZXJlbmNlc0dldCgpCgpnZXQgc2VydmljZSBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlUHJlZmVyZW5jZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNlcnZpY2VQcmVmZXJlbmNlc0dldCglUGFyYW0pOwp9Cgo9aGVhZDIgU2VydmljZVBhcmVudHNHZXQoKQoKcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBhbGwgcGFyZW50IHNlcnZpY2UgSURzIGZvciB0aGUgZ2l2ZW4gc2VydmljZSBmcm9tIHRoZSByb290IHBhcmVudCB0byB0aGUKY3VycmVudCBzZXJ2aWNlIHBhcmVudAoKICAgIG15ICRTZXJ2aWNlUGFyZW50c0xpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJucwoKICAgICRTZXJ2aWNlUGFyZW50c0xpc3QgPSBbIDEsIDIsIC4uLl07Cgo9Y3V0CgpzdWIgU2VydmljZVBhcmVudHNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJJRCBTZXJ2aWNlSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCAkTmVlZGVkIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZWFkIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnU2VydmljZVBhcmVudHNHZXQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiByZWYgJENhY2hlOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2VzCiAgICBteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGEgc2VydmljZSBsb29rdXAgdGFibGUKICAgIG15ICVTZXJ2aWNlTG9va3VwOwogICAgU0VSVklDRToKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CiAgICAgICAgbmV4dCBTRVJWSUNFIGlmICEkU2VydmljZURhdGE7CiAgICAgICAgbmV4dCBTRVJWSUNFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkU2VydmljZURhdGEpOwogICAgICAgIG5leHQgU0VSVklDRSBpZiAhJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfTsKCiAgICAgICAgJFNlcnZpY2VMb29rdXB7ICRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0gfSA9ICRTZXJ2aWNlRGF0YTsKICAgIH0KCiAgICAjIGV4aXQgaWYgU2VydmljZUlEIGlzIGludmFsaWQKICAgIHJldHVybiBpZiAhJFNlcnZpY2VMb29rdXB7ICRQYXJhbXtTZXJ2aWNlSUR9IH07CgogICAgIyB0byBzdG9yZSB0aGUgcmV0dXJuIHN0cnVjdHVyZQogICAgbXkgQFNlcnZpY2VQYXJlbnRzOwoKICAgICMgZ2V0IHRoZSBTZXJ2aWNlUGFyZW50SUQgZnJvbSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UKICAgIG15ICRTZXJ2aWNlUGFyZW50SUQgPSAkU2VydmljZUxvb2t1cHsgJFBhcmFte1NlcnZpY2VJRH0gfS0+e1BhcmVudElEfTsKCiAgICAjIGdldCBhbGwgcGFydGVudHMgZm9yIHRoZSByZXF1ZXN0ZWQgc2VydmljZQogICAgd2hpbGUgKCRTZXJ2aWNlUGFyZW50SUQpIHsKCiAgICAgICAgIyBhZGQgc2VydmljZSBwYXJlbnQgSUQgdG8gdGhlIHJldHVybiBzdHJ1Y3R1cmUKICAgICAgICBwdXNoIEBTZXJ2aWNlUGFyZW50cywgJFNlcnZpY2VQYXJlbnRJRDsKCiAgICAgICAgIyBzZXQgbmV4dCBTZXJ2aWNlUGFyZW50SUQgKHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgcGFyZW50KQogICAgICAgICRTZXJ2aWNlUGFyZW50SUQgPSAkU2VydmljZUxvb2t1cHskU2VydmljZVBhcmVudElEfS0+e1BhcmVudElEfSB8fCAwOwoKICAgIH0KCiAgICAjIHJldmVyc2UgdGhlIHJldHVybiBhcnJheSB0byBnZXQgdGhlIGxpc3Qgb3JkZXJlZCBmcm9tIG9sZCB0byB5b3VuZyAoaW4gcGFyZW50IGNvbnRleHQpCiAgICBteSBARGF0YSA9IHJldmVyc2UgQFNlcnZpY2VQYXJlbnRzOwoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBEYXRhLAogICAgKTsKCiAgICByZXR1cm4gXEBEYXRhOwp9Cgo9aGVhZDIgR2V0QWxsQ3VzdG9tU2VydmljZXMoKQoKZ2V0IGFsbCBjdXN0b20gc2VydmljZXMgb2Ygb25lIHVzZXIKCiAgICBteSBAU2VydmljZXMgPSAkU2VydmljZU9iamVjdC0+R2V0QWxsQ3VzdG9tU2VydmljZXMoIFVzZXJJRCA9PiAxMjMgKTsKCj1jdXQKCnN1YiBHZXRBbGxDdXN0b21TZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldEFsbEN1c3RvbVNlcnZpY2VzOjonIC4gJFBhcmFte1VzZXJJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgc2VhcmNoIGFsbCBjdXN0b20gc2VydmljZXMKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBzZXJ2aWNlX2lkCiAgICAgICAgICAgIEZST00gcGVyc29uYWxfc2VydmljZXMKICAgICAgICAgICAgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAU2VydmljZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICRSb3dbMF07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQFNlcnZpY2VJRHMsCiAgICApOwoKICAgIHJldHVybiBAU2VydmljZUlEczsKfQojIC0tLQojIElUU01Db3JlCiMgLS0tCgo9aGVhZDIgX1NlcnZpY2VHZXRDdXJyZW50SW5jaWRlbnRTdGF0ZSgpCgpSZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSBvcmlnaW5hbCBzZXJ2aWNlIGRhdGEsCmVuaGFuY2VkIHdpdGggYWRkaXRpb25hbCBzZXJ2aWNlIGRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUsCmJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gaXRlbXMgYW5kIG90aGVyIHNlcnZpY2VzLgoKICAgICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gXCVQcmVmZXJlbmNlcywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VEYXRhIFByZWZlcmVuY2VzIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VEYXRhIFByZWZlcmVuY2VzKSkgewogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgbG9jYWwgY29waWVzCiAgICBteSAlU2VydmljZURhdGEgPSAleyAkUGFyYW17U2VydmljZURhdGF9IH07CiAgICBteSAlUHJlZmVyZW5jZXMgPSAleyAkUGFyYW17UHJlZmVyZW5jZXN9IH07CgogICAgIyBnZXQgc2VydmljZSB0eXBlIGxpc3QKICAgIG15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKICAgICRTZXJ2aWNlRGF0YXtUeXBlfSA9ICRTZXJ2aWNlVHlwZUxpc3QtPnsgJFNlcnZpY2VEYXRhe1R5cGVJRH0gfSB8fCAnJzsKCiAgICAjIHNldCBkZWZhdWx0IGluY2lkZW50IHN0YXRlIHR5cGUKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICdvcGVyYXRpb25hbCc7CgogICAgIyBnZXQgSVRTTSBtb2R1bGUgZGlyZWN0b3J5CiAgICBteSAkQ29uZmlnSXRlbU1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gJy9LZXJuZWwvU3lzdGVtL0lUU01Db25maWdJdGVtLnBtJzsKCiAgICAjIGNoZWNrIGlmIElUU01Db25maWd1cmF0aW9uTWFuYWdlbWVudCBwYWNrYWdlIGlzIGluc3RhbGxlZAogICAgaWYgKCAtZSAkQ29uZmlnSXRlbU1vZHVsZSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBhIHByZWZlcmVuY2Ugc2V0dGluZyBmb3IgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMgZXhpc3RzCiAgICAgICAgaWYgKCAkUHJlZmVyZW5jZXN7Q3VySW5jaVN0YXRlVHlwZUZyb21DSXN9ICkgewoKICAgICAgICAgICAgIyBzZXQgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZyb20gc2VydmljZSBwcmVmZXJlbmNlcyAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRQcmVmZXJlbmNlc3tDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc307CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgcHJlZmVyZW5jZXMgc2V0dGluZyBmb3IgQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IGluY2lkZW50IGxpbmsgdHlwZXMgYW5kIGRpcmVjdGlvbnMgZnJvbSBjb25maWcKICAgICAgICAgICAgbXkgJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24nKTsKCiAgICAgICAgICAgICMgdG8gc3RvcmUgYWxsIGxpbmtlZCBjb25maWcgaXRlbSBpZHMgb2YgdGhpcyBzZXJ2aWNlIChmb3IgYWxsIGNvbmZpZ3VyZWQgbGluayB0eXBlcykKICAgICAgICAgICAgbXkgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHM7CgogICAgICAgICAgICBMSU5LVFlQRToKICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbiB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBkaXJlY3Rpb24KICAgICAgICAgICAgICAgIG15ICRMaW5rRGlyZWN0aW9uID0gJEluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24tPnskTGlua1R5cGV9OwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSB0aGUgbGluayBkaXJlY3Rpb24sIGFzIHRoaXMgaXMgdGhlIHBlcnNwZWN0aXZlIGZyb20gdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICMgbm8gbmVlZCB0byByZXZlcnNlIGlmIGRpcmVjdGlvbiBpcyAnQm90aCcKICAgICAgICAgICAgICAgIGlmICggJExpbmtEaXJlY3Rpb24gZXEgJ1NvdXJjZScgKSB7CiAgICAgICAgICAgICAgICAgICAgJExpbmtEaXJlY3Rpb24gPSAnVGFyZ2V0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJExpbmtEaXJlY3Rpb24gZXEgJ1RhcmdldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJExpbmtEaXJlY3Rpb24gPSAnU291cmNlJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGZpbmQgYWxsIGxpbmtlZCBjb25maWcgaXRlbXMgd2l0aCB0aGlzIGxpbmt0eXBlIGFuZCBkaXJlY3Rpb24KICAgICAgICAgICAgICAgIG15ICVMaW5rZWRDb25maWdJdGVtSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0tleUxpc3RXaXRoRGF0YSgKICAgICAgICAgICAgICAgICAgICBPYmplY3QxICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgIEtleTEgICAgICA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBPYmplY3QyICAgPT4gJ0lUU01Db25maWdJdGVtJywKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJExpbmtUeXBlLAogICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbiA9PiAkTGlua0RpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgbGlua2VkIGNvbmZpZyBpdGVtcwogICAgICAgICAgICAgICAgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMgPSAoICVBbGxMaW5rZWRDb25maWdJdGVtSURzLCAlTGlua2VkQ29uZmlnSXRlbUlEcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaW52ZXN0aWdhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgb2YgZWFjaCBjb25maWcgaXRlbQogICAgICAgICAgICBDT05GSUdJVEVNSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnSXRlbUlEICggc29ydCBrZXlzICVBbGxMaW5rZWRDb25maWdJdGVtSURzICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBjb25maWcgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnSXRlbURhdGEgPSAkQWxsTGlua2VkQ29uZmlnSXRlbUlEc3skQ29uZmlnSXRlbUlEfTsKCiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJEZXBsU3RhdGVUeXBlfSBuZSAncHJvZHVjdGl2ZSc7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRCBpZiAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBtdXN0IGJlIHNldCB0byAnd2FybmluZycKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ0l0ZW1EYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ3dhcm5pbmcnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgbXVzdCBiZSBzZXQgdG8gJ2luY2lkZW50JwogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnaW5jaWRlbnQnICkgewogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICdpbmNpZGVudCc7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBDT05GSUdJVEVNSUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICAgICAgICAgJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGF7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdGhlIHByZWZlcmVuY2VzIGxvY2FsbHkKICAgICAgICAgICAgJFByZWZlcmVuY2Vze0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzfSA9ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfTsKICAgICAgICB9CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSB0aGUgc3RhdGUgb2YgYWxsIGNoaWxkIHNlcnZpY2VzCiAgICBpZiAoICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSBlcSAnb3BlcmF0aW9uYWwnICkgewoKICAgICAgICAjIGNyZWF0ZSB0aGUgdmFsaWQgc3RyaW5nCiAgICAgICAgbXkgJFZhbGlkSURTdHJpbmcgPSBqb2luIHF7LCB9LCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgIyBwcmVwYXJlIG5hbWUKICAgICAgICBteSAkTmFtZSA9ICRTZXJ2aWNlRGF0YXtOYW1lfTsKICAgICAgICAkTmFtZSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJE5hbWUsICdMaWtlJyApOwoKICAgICAgICAjIGdldCBsaXN0IG9mIGFsbCB2YWxpZCBjaGlsZHMKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzZXJ2aWNlICIKICAgICAgICAgICAgICAgIC4gIldIRVJFIG5hbWUgTElLRSAnIiAuICROYW1lIC4gIjo6JScgIgogICAgICAgICAgICAgICAgLiAiQU5EIHZhbGlkX2lkIElOICgiIC4gJFZhbGlkSURTdHJpbmcgLiAiKSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBmaW5kIGxlbmd0aCBvZiBjaGlsZHMgcHJlZml4CiAgICAgICAgbXkgJFByZWZpeExlbmd0aCA9IGxlbmd0aCAiJFNlcnZpY2VEYXRhe05hbWV9OjoiOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSBAQ2hpbGRJRHM7CiAgICAgICAgUk9XOgogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgY2hpbGQgcGFydAogICAgICAgICAgICBteSAkQ2hpbGRQYXJ0ID0gc3Vic3RyICRSb3dbMV0sICRQcmVmaXhMZW5ndGg7CgogICAgICAgICAgICBuZXh0IFJPVyBpZiAkQ2hpbGRQYXJ0ID1+IG17IDo6IH14bXM7CgogICAgICAgICAgICBwdXNoIEBDaGlsZElEcywgJFJvd1swXTsKICAgICAgICB9CgogICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEBDaGlsZElEcyApIHsKCiAgICAgICAgICAgICMgZ2V0IGRhdGEgb2YgY2hpbGQgc2VydmljZQogICAgICAgICAgICBteSAlQ2hpbGRTZXJ2aWNlRGF0YSA9ICRTZWxmLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRUlEIGlmICRDaGlsZFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCc7CgogICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gPSAnd2FybmluZyc7CiAgICAgICAgICAgIGxhc3QgU0VSVklDRUlEOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlZmluZSBkZWZhdWx0IGluY2lkZW50IHN0YXRlcwogICAgbXkgJURlZmF1bHRJbmNpU3RhdGVzID0gKAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ1dhcm5pbmcnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdJbmNpZGVudCcsCiAgICApOwoKICAgICMgZ2V0IHRoZSBpbmNpZGVudCBzdGF0ZSBsaXN0IG9mIHRoaXMgdHlwZQogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgUHJlZmVyZW5jZXMgICA9PiB7CiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICVSZXZlcnNlSW5jaVN0YXRlTGlzdCA9IHJldmVyc2UgJXsgJEluY2lTdGF0ZUxpc3QgfTsKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0KICAgICAgICA9ICRSZXZlcnNlSW5jaVN0YXRlTGlzdHsgJERlZmF1bHRJbmNpU3RhdGVzeyAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gfSB9OwoKICAgICMgZmFsbGJhY2sgaWYgdGhlIGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgaXMgZGVhY3RpdmF0ZWQKICAgIGlmICggISRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0gKSB7CiAgICAgICAgbXkgQFNvcnRlZEluY2lMaXN0ID0gc29ydCBrZXlzICV7ICRJbmNpU3RhdGVMaXN0IH07CiAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSA9ICRTb3J0ZWRJbmNpTGlzdFswXTsKICAgIH0KCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBmdW5jdGlvbmFsaXR5CiAgICBteSAkSW5jaVN0YXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0sCiAgICApOwoKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGV9ICAgICA9ICRJbmNpU3RhdGUtPntOYW1lfTsKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICRJbmNpU3RhdGUtPntGdW5jdGlvbmFsaXR5fTsKCiAgICAlU2VydmljZURhdGEgPSAoJVNlcnZpY2VEYXRhLCAlUHJlZmVyZW5jZXMpOwoKICAgIHJldHVybiAlU2VydmljZURhdGE7Cn0KCiMgLS0tCgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAwZDE0NmU5MjRkMzQ1ZWI4OTA1MTM0Yzk4NmE0MjYzMTA0YzcxYmJjIC0gS2VybmVsL1N5c3RlbS9TTEEucG0KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAojIC0tLQogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlNMQSAtIHNsYSBsaWIKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIHNsYSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpEb24ndCB1c2UgdGhlIGNvbnN0cnVjdG9yIGRpcmVjdGx5LCB1c2UgdGhlIE9iamVjdE1hbmFnZXIgaW5zdGVhZDoKCiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBjb25maWd1cmVkIHByZWZlcmVuY2VzIG9iamVjdAogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU0xBOjpQcmVmZXJlbmNlc01vZHVsZScpCiAgICAgICAgfHwgJ0tlcm5lbDo6U3lzdGVtOjpTTEE6OlByZWZlcmVuY2VzREInOwoKICAgICMgZ2V0IHByZWZlcmVuY2VzIG9iamVjdAogICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCRHZW5lcmF0b3JNb2R1bGUpOwoKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdTTEEnOwogICAgJFNlbGYtPntDYWNoZVRUTH0gID0gNjAgKiA2MCAqIDI0ICogMjA7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgU0xBTGlzdCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2Ygc2xhcwoKICAgIG15ICVTTEFMaXN0ID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMSwgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkICAgICA9PiAwLCAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTTEFMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IHZhbGlkIHBhcmFtCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFBhcmFte1ZhbGlkfSA9IDE7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFkZCBTZXJ2aWNlSUQKICAgIG15ICVTUUxUYWJsZTsKICAgICRTUUxUYWJsZXtzbGF9ID0gJ3NsYSBzJzsKICAgIG15IEBTUUxXaGVyZTsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CgogICAgICAgICMgcXVvdGUKICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtTZXJ2aWNlSUR9LCAnSW50ZWdlcicgKTsKCiAgICAgICAgJFNRTFRhYmxle3NlcnZpY2V9ID0gJ3NlcnZpY2Vfc2xhIHInOwogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAicy5pZCA9IHIuc2xhX2lkIEFORCByLnNlcnZpY2VfaWQgPSAkUGFyYW17U2VydmljZUlEfSI7CiAgICB9CgogICAgIyBhZGQgdmFsaWQgcGFydAogICAgaWYgKCAkUGFyYW17VmFsaWR9ICkgewoKICAgICAgICAjIGdldCB2YWxpZCBvYmplY3QKICAgICAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICAgICAgIyBjcmVhdGUgdGhlIHZhbGlkIGxpc3QKICAgICAgICBteSAkVmFsaWRJRHMgPSBqb2luICcsICcsICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKTsKCiAgICAgICAgcHVzaCBAU1FMV2hlcmUsICJzLnZhbGlkX2lkIElOICggJFZhbGlkSURzICkiOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSB0YWJsZSBhbmQgd2hlcmUgc3RyaW5ncwogICAgbXkgJFRhYmxlU3RyaW5nID0gam9pbiBxeywgfSwgdmFsdWVzICVTUUxUYWJsZTsKICAgIG15ICRXaGVyZVN0cmluZyA9IEBTUUxXaGVyZSA/ICcgV0hFUkUgJyAuIGpvaW4gcXsgQU5EIH0sIEBTUUxXaGVyZSA6ICcnOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1Qgcy5pZCwgcy5uYW1lIEZST00gJFRhYmxlU3RyaW5nICRXaGVyZVN0cmluZyIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNMQUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU0xBTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICByZXR1cm4gJVNMQUxpc3Q7Cn0KCj1oZWFkMiBTTEFHZXQoKQoKUmV0dXJucyBhbiBTTEEgYXMgYSBoYXNoCgogICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgU0xBSUQgID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgIG15ICVTTEFEYXRhID0gKAogICAgICAgICAgJ1NMQUlEJyAgICAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICdOYW1lJyAgICAgICAgICAgICAgICA9PiAnRGlhbW9uZCBQYWNpZmljIC0gUzInLAogICAgICAgICAgJ0NhbGVuZGFyJyAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICdGaXJzdFJlc3BvbnNlVGltZScgICA9PiAnNjAnLCAgICMgaW4gbWludXRlcyBhY2NvcmRpbmcgdG8gYnVzaW5lc3MgaG91cnMKICAgICAgICAgICdGaXJzdFJlc3BvbnNlTm90aWZ5JyA9PiAnNzAnLCAgICMgaW4gcGVyY2VudAogICAgICAgICAgJ1VwZGF0ZVRpbWUnICAgICAgICAgID0+ICczNjAnLCAgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ1VwZGF0ZU5vdGlmeScgICAgICAgID0+ICc3MCcsICAgIyBpbiBwZXJjZW50CiAgICAgICAgICAnU29sdXRpb25UaW1lJyAgICAgICAgPT4gJzk2MCcsICAjIGluIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIGhvdXJzCiAgICAgICAgICAnU29sdXRpb25Ob3RpZnknICAgICAgPT4gJzgwJywgICAjIGluIHBlcmNlbnQKICAgICAgICAgICdTZXJ2aWNlSURzJyAgICAgICAgICA9PiBbICc0JywgJzcnLCAnOCcgXSwKICAgICAgICAgICdWYWxpZElEJyAgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAnQ29tbWVudCcgICAgICAgICAgICAgPT4gJ1NvbWUgQ29tbWVudCcsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICdUeXBlSUQnICAgICAgICAgICAgICAgICAgPT4gJzUnLAogICAgICAgICAgJ1R5cGUnICAgICAgICAgICAgICAgICAgICA9PiAnSW5jaWRlbnQnLAogICAgICAgICAgJ01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzJyA9PiAnNDAwMCcsICAjIGluIG1pbnV0ZXMKIyAtLS0KICAgICAgICAgICdDcmVhdGVCeScgICAgICAgICAgICA9PiAnOTMnLAogICAgICAgICAgJ0NyZWF0ZVRpbWUnICAgICAgICAgID0+ICcyMDExLTA2LTE2IDIyOjU0OjU0JywKICAgICAgICAgICdDaGFuZ2VCeScgICAgICAgICAgICA9PiAnOTMnLAogICAgICAgICAgJ0NoYW5nZVRpbWUnICAgICAgICAgID0+ICcyMDExLTA2LTE2IDIyOjU0OjU0JywKICAgICk7Cgo9Y3V0CgpzdWIgU0xBR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNMQUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U0xBR2V0OjonIC4gJFBhcmFte1NMQUlEfTsKICAgIG15ICRDYWNoZWQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgICAgICAgICAgID0+ICRDYWNoZUtleSwKICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICApOwoKICAgIGlmICggcmVmICRDYWNoZWQgZXEgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAleyRDYWNoZWR9OwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgc2xhIGZyb20gZGIKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSwgY2FsZW5kYXJfbmFtZSwgZmlyc3RfcmVzcG9uc2VfdGltZSwgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5LCAnCiAgICAgICAgICAgIC4gJ3VwZGF0ZV90aW1lLCB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksICcKICAgICAgICAgICAgLiAndmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAuICcsIHR5cGVfaWQsIG1pbl90aW1lX2JldF9pbmNpZGVudHMgJwojIC0tLQogICAgICAgICAgICAuICdGUk9NIHNsYSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte1NMQUlEfSwKICAgICAgICBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNMQURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU0xBRGF0YXtTTEFJRH0gICAgICAgICAgICAgICA9ICRSb3dbMF07CiAgICAgICAgJFNMQURhdGF7TmFtZX0gICAgICAgICAgICAgICAgPSAkUm93WzFdOwogICAgICAgICRTTEFEYXRhe0NhbGVuZGFyfSAgICAgICAgICAgID0gJFJvd1syXSB8fCAnJzsKICAgICAgICAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlVGltZX0gICA9ICRSb3dbM107CiAgICAgICAgJFNMQURhdGF7Rmlyc3RSZXNwb25zZU5vdGlmeX0gPSAkUm93WzRdOwogICAgICAgICRTTEFEYXRhe1VwZGF0ZVRpbWV9ICAgICAgICAgID0gJFJvd1s1XTsKICAgICAgICAkU0xBRGF0YXtVcGRhdGVOb3RpZnl9ICAgICAgICA9ICRSb3dbNl07CiAgICAgICAgJFNMQURhdGF7U29sdXRpb25UaW1lfSAgICAgICAgPSAkUm93WzddOwogICAgICAgICRTTEFEYXRhe1NvbHV0aW9uTm90aWZ5fSAgICAgID0gJFJvd1s4XTsKICAgICAgICAkU0xBRGF0YXtWYWxpZElEfSAgICAgICAgICAgICA9ICRSb3dbOV07CiAgICAgICAgJFNMQURhdGF7Q29tbWVudH0gICAgICAgICAgICAgPSAkUm93WzEwXSB8fCAnJzsKICAgICAgICAkU0xBRGF0YXtDcmVhdGVUaW1lfSAgICAgICAgICA9ICRSb3dbMTFdOwogICAgICAgICRTTEFEYXRhe0NyZWF0ZUJ5fSAgICAgICAgICAgID0gJFJvd1sxMl07CiAgICAgICAgJFNMQURhdGF7Q2hhbmdlVGltZX0gICAgICAgICAgPSAkUm93WzEzXTsKICAgICAgICAkU0xBRGF0YXtDaGFuZ2VCeX0gICAgICAgICAgICA9ICRSb3dbMTRdOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgJFNMQURhdGF7VHlwZUlEfSAgICAgICAgICAgICAgICAgID0gJFJvd1sxNV07CiAgICAgICAgJFNMQURhdGF7TWluVGltZUJldHdlZW5JbmNpZGVudHN9ID0gJFJvd1sxNl0gfHwgMDsKIyAtLS0KICAgIH0KCiAgICAjIGNoZWNrIHNsYQogICAgaWYgKCAhJFNMQURhdGF7U0xBSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBTTEFJRCAoJFBhcmFte1NMQUlEfSkhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgIyBnZXQgc2xhIHR5cGUgbGlzdAogICAgbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAogICAgKTsKICAgICRTTEFEYXRhe1R5cGV9ID0gJFNMQVR5cGVMaXN0LT57ICRTTEFEYXRhe1R5cGVJRH0gfSB8fCAnJzsKIyAtLS0KCiAgICAjIGdldCBhbGwgc2VydmljZSBpZHMKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1Qgc2VydmljZV9pZCBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNsYV9pZCA9ID8gT1JERVIgQlkgc2VydmljZV9pZCBBU0MnLAogICAgICAgIEJpbmQgPT4gWyBcJFNMQURhdGF7U0xBSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFNlcnZpY2VJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkUm93WzBdOwogICAgfQoKICAgICMgYWRkIHRoZSBpZHMKICAgICRTTEFEYXRhe1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwoKICAgICMgZ2V0IHNsYSBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlNMQVByZWZlcmVuY2VzR2V0KCBTTEFJRCA9PiAkUGFyYW17U0xBSUR9ICk7CgogICAgIyBtZXJnZSBoYXNoCiAgICBpZiAoJVByZWZlcmVuY2VzKSB7CiAgICAgICAgJVNMQURhdGEgPSAoICVTTEFEYXRhLCAlUHJlZmVyZW5jZXMgKTsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAoKICAgICAgICAjIG1ha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBzbGEgZGF0YSB0byBhdm9pZCBpdCBiZWluZyBhbHRlcmVkIGluLW1lbW9yeSBsYXRlcgogICAgICAgIFZhbHVlICAgICAgICAgID0+IHslU0xBRGF0YX0sCiAgICAgICAgQ2FjaGVJbk1lbW9yeSAgPT4gMSwKICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgKTsKCiAgICByZXR1cm4gJVNMQURhdGE7Cn0KCj1oZWFkMiBTTEFMb29rdXAoKQoKcmV0dXJucyB0aGUgbmFtZSBvciB0aGUgc2xhIGlkCgogICAgbXkgJFNMQU5hbWUgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoCiAgICAgICAgU0xBSUQgPT4gMTIzLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCgKICAgICAgICBOYW1lID0+ICdTTEEgTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIFNMQUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U0xBSUR9ICYmICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNMQUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIGlmICggJFBhcmFte1NMQUlEfSApIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U0xBTG9va3VwOjpJRDo6JyAuICRQYXJhbXtTTEFJRH07CiAgICAgICAgbXkgJENhY2hlZCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICAgICAgKTsKICAgICAgICBpZiAoIGRlZmluZWQgJENhY2hlZCApIHsKICAgICAgICAgICAgcmV0dXJuICRDYWNoZWQ7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBuYW1lIEZST00gc2xhIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTTEFJRH0sIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJE5hbWUgPSAnJzsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJE5hbWUgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgICAgICAgICAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgPT4gJE5hbWUsCiAgICAgICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICROYW1lOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNMQUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICBteSAkQ2FjaGVkICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgICAgICAgICAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgQ2FjaGVJbk1lbW9yeSAgPT4gMSwKICAgICAgICAgICAgQ2FjaGVJbkJhY2tlbmQgPT4gMCwKICAgICAgICApOwogICAgICAgIGlmICggZGVmaW5lZCAkQ2FjaGVkICkgewogICAgICAgICAgICByZXR1cm4gJENhY2hlZDsKICAgICAgICB9CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJFNMQUlEID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRTTEFJRCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAjIGNhY2hlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTTEFJRDsKICAgIH0KfQoKPWhlYWQyIFNMQUFkZCgpCgphZGQgYSBzbGEKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbIDEsIDUsIDcgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NMQSBOYW1lJywKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICdDYWxlbmRhcjEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMjAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIGZpcnN0IHJlc3BvbnNlIGVzY2FsYXRpb24gaXMgNjAlIHJlYWNoZWQKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDU4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBNaW5UaW1lQmV0d2VlbkluY2lkZW50cyA9PiAzNDQzLCAgICAgIyAob3B0aW9uYWwpCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNMQUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBpZHMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17U2VydmljZUlEc30gJiYgcmVmICRQYXJhbXtTZXJ2aWNlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnU2VydmljZUlEcyBuZWVkcyB0byBiZSBhbiBhcnJheSByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgJFBhcmFte1NlcnZpY2VJRHN9ICAgICAgICAgIHx8PSBbXTsKICAgICRQYXJhbXtDYWxlbmRhcn0gICAgICAgICAgICB8fD0gJyc7CiAgICAkUGFyYW17Q29tbWVudH0gICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSAgIHx8PSAwOwogICAgJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9IHx8PSAwOwogICAgJFBhcmFte1VwZGF0ZVRpbWV9ICAgICAgICAgIHx8PSAwOwogICAgJFBhcmFte1VwZGF0ZU5vdGlmeX0gICAgICAgIHx8PSAwOwogICAgJFBhcmFte1NvbHV0aW9uVGltZX0gICAgICAgIHx8PSAwOwogICAgJFBhcmFte1NvbHV0aW9uTm90aWZ5fSAgICAgIHx8PSAwOwojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAkUGFyYW17TWluVGltZUJldHdlZW5JbmNpZGVudHN9IHx8PSAwOwojIC0tLQoKICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICBteSAkQ2hlY2tJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZpbmQgZXhpdGluZyBzbGEncyB3aXRoIHRoZSBzYW1lIG5hbWUKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROb0FkZDsKICAgIHdoaWxlICggJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgc2xhLCBpZiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBbiBTTEEgd2l0aCB0aGUgbmFtZSAnJFBhcmFte05hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYWRkIHNsYSB0byBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2xhICcKIyAgICAgICAgICAgIC4gJyhuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKIyAgICAgICAgICAgIC4gJ3VwZGF0ZV90aW1lLCB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKIyAgICAgICAgICAgIC4gJyg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKIyAgICAgICAgQmluZCA9PiBbCiMgICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sCiMgICAgICAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9LCBcJFBhcmFte1VwZGF0ZVRpbWV9LCAgICAgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAojICAgICAgICAgICAgXCRQYXJhbXtTb2x1dGlvblRpbWV9LCAgICAgICAgXCRQYXJhbXtTb2x1dGlvbk5vdGlmeX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNsYSAnCiAgICAgICAgICAgIC4gJyhuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUsIHVwZGF0ZV9ub3RpZnksIHNvbHV0aW9uX3RpbWUsIHNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgICAgICAuICd2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnksICcKICAgICAgICAgICAgLiAndHlwZV9pZCwgbWluX3RpbWVfYmV0X2luY2lkZW50cykgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIGdldCBzbGEgaWQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzbGEgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFNMQUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGNoZWNrIHNsYSBpZAogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZmluZCBTTEFJRCBmb3IgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlbW92ZSBhbGwgZXhpc3RpbmcgYWxsb2NhdGlvbnMKICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBSUQgXSwKICAgICk7CgogICAgIyBhZGQgdGhlIG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBAeyAkUGFyYW17U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgIyBhZGQgb25lIGFsbG9jYXRpb24KICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX3NsYSAoc2VydmljZV9pZCwgc2xhX2lkKSBWQUxVRVMgKD8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZUlELCBcJFNMQUlEIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFNMQUlEOwp9Cgo9aGVhZDIgU0xBVXBkYXRlKCkKCnVwZGF0ZSBhIGV4aXN0aW5nIHNsYQoKICAgIG15ICRUcnVlID0gJFNMQU9iamVjdC0+U0xBVXBkYXRlKAogICAgICAgIFNMQUlEICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgMSwgMiwgMyBdLCAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnU2VydmljZSBOYW1lJywKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICdDYWxlbmRhcjEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMjAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIGZpcnN0IHJlc3BvbnNlIGVzY2FsYXRpb24gaXMgNjAlIHJlYWNoZWQKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDU4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBNaW5UaW1lQmV0d2VlbkluY2lkZW50cyA9PiAzNDQzLCAgIyAob3B0aW9uYWwpCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNMQVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTTEFJRCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBpZHMKICAgIGlmICggZGVmaW5lZCAkUGFyYW17U2VydmljZUlEc30gJiYgcmVmICRQYXJhbXtTZXJ2aWNlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnU2VydmljZUlEcyBuZWVkIHRvIGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICAkUGFyYW17U2VydmljZUlEc30gICAgICAgICAgfHw9IFtdOwogICAgJFBhcmFte0NhbGVuZGFyfSAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtDb21tZW50fSAgICAgICAgICAgICB8fD0gJyc7CiAgICAkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9ICAgfHw9IDA7CiAgICAkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0gfHw9IDA7CiAgICAkUGFyYW17VXBkYXRlVGltZX0gICAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17VXBkYXRlTm90aWZ5fSAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17U29sdXRpb25UaW1lfSAgICAgICAgfHw9IDA7CiAgICAkUGFyYW17U29sdXRpb25Ob3RpZnl9ICAgICAgfHw9IDA7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gfHw9IDA7CiMgLS0tCgogICAgIyBnZXQgY2hlY2sgaXRlbSBvYmplY3QKICAgIG15ICRDaGVja0l0ZW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyk7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRDaGVja0l0ZW1PYmplY3QtPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZmluZCBleGl0aW5nIHNsYSdzIHdpdGggdGhlIHNhbWUgbmFtZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkVXBkYXRlID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIGlmICggJFJvd1swXSAhPSAkUGFyYW17U0xBSUR9ICkgewogICAgICAgICAgICAkVXBkYXRlID0gJFJvd1swXTsKICAgICAgICB9CiAgICB9CgogICAgIyBhYm9ydCB1cGRhdGUgb2Ygc2xhLCBpZiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQW4gU0xBIHdpdGggdGhlIG5hbWUgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlOjpTTEFHZXQ6OicgLiAkUGFyYW17U0xBSUR9LAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2FjaGU6OlNMQUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfSwKICAgICk7CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NhY2hlOjpTTEFMb29rdXA6OklEOjonIC4gJFBhcmFte1NMQUlEfSwKICAgICk7CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAojIC0tLQojIElUU01Db3JlCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNsYSBTRVQgbmFtZSA9ID8sIGNhbGVuZGFyX25hbWUgPSA/LCAnCiMgICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwojICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUgPSA/LCB1cGRhdGVfbm90aWZ5ID0gPywgc29sdXRpb25fdGltZSA9ID8sIHNvbHV0aW9uX25vdGlmeSA9ID8sICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/ICcKIyAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9LAojICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKIyAgICAgICAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1NMQUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzbGEgU0VUIG5hbWUgPSA/LCBjYWxlbmRhcl9uYW1lID0gPywgJwogICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSA9ID8sIHVwZGF0ZV9ub3RpZnkgPSA/LCBzb2x1dGlvbl90aW1lID0gPywgc29sdXRpb25fbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPywgJwogICAgICAgICAgICAuICd0eXBlX2lkID0gPywgbWluX3RpbWVfYmV0X2luY2lkZW50cyA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30sIFwkUGFyYW17U0xBSUR9LAogICAgICAgIF0sCiMgLS0tCiAgICApOwoKICAgICMgcmVtb3ZlIGFsbCBleGlzdGluZyBhbGxvY2F0aW9ucwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNsYV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NMQUlEfSwgXQogICAgKTsKCiAgICAjIGFkZCB0aGUgbmV3IGFsbG9jYXRpb25zCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRQYXJhbXtTZXJ2aWNlSURzfSB9ICkgewoKICAgICAgICAjIGFkZCBvbmUgYWxsb2NhdGlvbgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAnSU5TRVJUIElOVE8gc2VydmljZV9zbGEgKHNlcnZpY2VfaWQsIHNsYV9pZCkgVkFMVUVTICg/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCwgXCRQYXJhbXtTTEFJRH0gXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgU0xBUHJlZmVyZW5jZXNTZXQoKQoKc2V0IFNMQSBwcmVmZXJlbmNlcwoKICAgICRTTEFPYmplY3QtPlNMQVByZWZlcmVuY2VzU2V0KAogICAgICAgIFNMQUlEICA9PiAxMjMsCiAgICAgICAgS2V5ICAgID0+ICdVc2VyQ29tbWVudCcsCiAgICAgICAgVmFsdWUgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNMQVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TTEFQcmVmZXJlbmNlc1NldCglUGFyYW0pOwp9Cgo9aGVhZDIgU0xBUHJlZmVyZW5jZXNHZXQoKQoKZ2V0IFNMQSBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTTEFPYmplY3QtPlNMQVByZWZlcmVuY2VzR2V0KAogICAgICAgIFNMQUlEICA9PiAxMjMsCiAgICAgICAgVXNlcklEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU0xBUHJlZmVyZW5jZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNMQVByZWZlcmVuY2VzR2V0KCVQYXJhbSk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA1ZjU0N2Q4NzY3M2FhYmU3NzM2YTI4OGI3N2ExZjY1YjI1YjM2NzdmIC0gc2NyaXB0cy90ZXN0L0NvbnNvbGUvQ29tbWFuZC9BZG1pbi9TZXJ2aWNlL0FkZC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkQ29tbWFuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6U2VydmljZTo6QWRkJyk7CgpteSAoICRSZXN1bHQsICRFeGl0Q29kZSApOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFBhcmVudFNlcnZpY2VOYW1lID0gIlBhcmVudFNlcnZpY2UiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKbXkgJENoaWxkU2VydmljZU5hbWUgID0gIkNoaWxkU2VydmljZSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyB0cnkgdG8gZXhlY3V0ZSBjb21tYW5kIHdpdGhvdXQgYW55IG9wdGlvbnMKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJObyBvcHRpb25zIiwKKTsKCiMgcHJvdmlkZSBtaW5pbXVtIG9wdGlvbnMKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUgKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk1pbmltdW0gb3B0aW9ucyAoIHRoZSBzZXJ2aWNlIGlzIGFkZGVkIC0gJFBhcmVudFNlcnZpY2VOYW1lICkiLAopOwoKIyBzYW1lIGFnYWluIChzaG91bGQgZmFpbCBiZWNhdXNlIGFscmVhZHkgZXhpc3RzKQojIC0tLQojIElUU01Db3JlCiMgLS0tCiMkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CiMgLS0tCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiTWluaW11bSBvcHRpb25zICggc2VydmljZSAkUGFyZW50U2VydmljZU5hbWUgYWxyZWFkeSBleGlzdHMgKSIsCik7CgojIGludmFsaWQgcGFyZW50CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJENoaWxkU2VydmljZU5hbWUgKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CiMgLS0tCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiUGFyZW50IHNlcnZpY2UgJENoaWxkU2VydmljZU5hbWUgZG9lcyBub3QgZXhpc3QiLAopOwoKIyB2YWxpZCBwYXJlbnQKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUgKTsKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkQ2hpbGRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIkV4aXN0aW5nIHBhcmVudCAoIHNlcnZpY2UgaXMgYWRkZWQgLSAkQ2hpbGRTZXJ2aWNlTmFtZSApIiwKKTsKCiMgU2FtZSBhZ2FpbiAoc2hvdWxkIGZhaWwgYmVjYXVzZSBhbHJlYWR5IGV4aXN0cykuCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lICk7CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1jcml0aWNhbGl0eScsICczIG5vcm1hbCcsICctLXR5cGUnLCAnRGVtb25zdHJhdGlvbicgKTsKIyAtLS0KJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJFeGlzdGluZyBwYXJlbnQgKCBzZXJ2aWNlICR7UGFyZW50U2VydmljZU5hbWV9OjokQ2hpbGRTZXJ2aWNlTmFtZSBhbHJlYWR5IGV4aXN0cyApIiwKKTsKCiMgUGFyZW50IGFuZCBjaGlsZCBzZXJ2aWNlIHNhbWUgbmFtZS4KIyAtLS0KIyBJVFNNQ29yZQojIC0tLQojJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lICk7CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CiMgLS0tCm15ICRTZXJ2aWNlTmFtZSA9ICRQYXJlbnRTZXJ2aWNlTmFtZSAuICc6OicgLiAkUGFyZW50U2VydmljZU5hbWU7CiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiUGFyZW50IGFuZCBjaGlsZCBzZXJ2aWNlIHNhbWUgbmFtZSAtICRTZXJ2aWNlTmFtZSAtIGlzIGNyZWF0ZWQiLAopOwoKIyBQYXJlbnQgKHR3byBsZXZlbHMpIGFuZCBjaGlsZCBzYW1lIG5hbWUuCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkU2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwojIC0tLQokU2VydmljZU5hbWUgPSAkU2VydmljZU5hbWUgLiAnOjonIC4gJFBhcmVudFNlcnZpY2VOYW1lOwokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIlBhcmVudCAodHdvIGxldmVscykgYW5kIGNoaWxkIHNlcnZpY2Ugc2FtZSBuYW1lIC0gJFNlcnZpY2VOYW1lIC0gaXMgY3JlYXRlZCIsCik7CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxYjJiZGU5YWJkMDNiNTdjYmEyNjQ4YWYzZTlkYjQwYjViMjMwOTY3IC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRDcmVhdGUudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgU29ja2V0Owp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRDcmVhdGU7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6U2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0FycmF5UmVmV2l0aERhdGEgSXNIYXNoUmVmV2l0aERhdGEgSXNTdHJpbmdXaXRoRGF0YSk7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBTa2lwU1NMVmVyaWZ5ICAgICA9PiAxLAogICAgICAgIERpc2FibGVBc3luY0NhbGxzID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKJEhlbHBlci0+e0Rlc3Ryb3lMb2d9ID0gMTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgVmFsdWUgPT4gMSwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBkaXNhYmxlIEROUyBsb29rdXBzCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrTVhSZWNvcmQnLAogICAgVmFsdWUgPT4gMCwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgZGlzYWJsZSBTZXNzaW9uQ2hlY2tSZW1vdGVJUCBzZXR0aW5nCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1Nlc3Npb25DaGVja1JlbW90ZUlQJywKICAgIFZhbHVlID0+IDAsCik7CgojIGVuYWJsZSBjdXN0b21lciBncm91cHMgc3VwcG9ydAokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdDdXN0b21lckdyb3VwU3VwcG9ydCcsCiAgICBWYWx1ZSA9PiAxLAopOwoKJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgT2JqZWN0cyAgICAgICAgICAgID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgIEZvcmNlUGFja2FnZVJlbG9hZCA9PiAxLAopOwoKbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgojIGNoZWNrIGlmIFNTTCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQKJFNlbGYtPklzKAogICAgJEVOVntQRVJMX0xXUF9TU0xfVkVSSUZZX0hPU1ROQU1FfSwKICAgIDAsCiAgICAnRGlzYWJsZWQgU1NMIGNlcnRpZmljYXRlcyB2ZXJpZmljYXRpb24gaW4gZW52aXJvbm1lbnQnCik7CgpteSAkVGVzdE93bmVyTG9naW4gICAgICAgID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RSZXNwb25zaWJsZUxvZ2luICA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0VXNlckxvZ2luICAgICAgICAgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsIF0sCik7CgpteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgpteSAkT3duZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0T3duZXJMb2dpbiwKKTsKbXkgJFJlc3BvbnNpYmxlSUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCik7Cm15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKKTsKCm15ICRJbnZhbGlkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICdpbnZhbGlkJyApOwoKIyBzYW5pdHkgdGVzdAokU2VsZi0+SXNOb3QoCiAgICAkSW52YWxpZElELAogICAgdW5kZWYsCiAgICAiVmFsaWRMb29rdXAoKSBmb3IgJ2ludmFsaWQnIHNob3VsZCBub3QgYmUgdW5kZWYiCik7CgojIGdldCBncm91cCBvYmplY3QKbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgojIGNyZWF0ZSBhIG5ldyBncm91cApteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U3BlY2lhbCcgLiAkUmFuZG9tSUQsCiAgICBDb21tZW50ID0+ICdjb21tZW50IGRlc2NyaWJpbmcgdGhlIGdyb3VwJywgICAgIyBvcHRpb25hbAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKbXkgJUdyb3VwRGF0YSA9ICRHcm91cE9iamVjdC0+R3JvdXBHZXQoIElEID0+ICRHcm91cElEICk7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJUdyb3VwRGF0YSApLAogICAgIkdyb3VwR2V0KCkgLSBmb3IgdGVzdGluZyBncm91cCIKKTsKCiMgY3JlYXRlIHF1ZXVlIG9iamVjdApteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCm15IEBRdWV1ZXM7CgpteSBAUXVldWVQcm9wZXJ0aWVzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ3F1ZXVlMScgLiAkUmFuZG9tSUQsCiAgICAgICAgR3JvdXBJRCA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdxdWV1ZTInIC4gJFJhbmRvbUlELAogICAgICAgIEdyb3VwSUQgPT4gJEdyb3VwSUQsCiAgICB9Cik7CgojIGNyZWF0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZVByb3BlcnR5IChAUXVldWVQcm9wZXJ0aWVzKSB7CiAgICBteSAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICAgICAgJXskUXVldWVQcm9wZXJ0eX0sCiAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgIlF1ZXVlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBxdWV1ZSIKICAgICk7CiAgICBteSAlUXVldWVEYXRhID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUdldCggSUQgPT4gJFF1ZXVlSUQgKTsKCiAgICBwdXNoIEBRdWV1ZXMsIFwlUXVldWVEYXRhOwp9CgojIGdldCB0eXBlIG9iamVjdApteSAkVHlwZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7CgojIGNyZWF0ZSBuZXcgdHlwZQpteSAkVHlwZUlEID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0VHlwZScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUeXBlSUQsCiAgICAiVHlwZUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgdHlwZSIKKTsKCm15ICVUeXBlRGF0YSA9ICRUeXBlT2JqZWN0LT5UeXBlR2V0KAogICAgSUQgPT4gJFR5cGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVHlwZURhdGEgKSwKICAgICJUeXBlR2V0KCkgLSBmb3IgdGVzdGluZyB0eXBlIgopOwoKIyBjcmVhdGUgc2VydmljZSBvYmplY3QKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNlcnZpY2VUeXBlTGlzdCB9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNMQVR5cGVMaXN0IH07CiMgLS0tCgojIGNyZWF0ZSBuZXcgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBzZXJ2aWNlIgopOwoKbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVTZXJ2aWNlRGF0YSApLAogICAgIlNlcnZpY2VHZXQoKSAtIGZvciB0ZXN0aW5nIHNlcnZpY2UiCik7CgojIHNldCBzZXJ2aWNlIGZvciB0aGUgY3VzdG9tZXIKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBjcmVhdGUgU0xBIG9iamVjdApteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKIyBjcmVhdGUgbmV3IFNMQQpteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICBOYW1lICAgICAgID0+ICdUZXN0U0xBJyAuICRSYW5kb21JRCwKICAgIFNlcnZpY2VJRHMgPT4gWyRTZXJ2aWNlSURdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCiMgLS0tCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTTEFJRCwKICAgICJTTEFBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIFNMQSIKKTsKCm15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgU0xBSUQgID0+ICRTTEFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVTTEFEYXRhICksCiAgICAiU0xBR2V0KCkgLSBmb3IgdGVzdGluZyBTTEEiCik7CgojIGNyZWF0ZSBzdGF0ZSBvYmplY3QKbXkgJFN0YXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyk7CgojIGNyZWF0ZSBuZXcgc3RhdGUKbXkgJFN0YXRlSUQgPSAkU3RhdGVPYmplY3QtPlN0YXRlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFN0YXRlJyAuICRSYW5kb21JRCwKICAgIFR5cGVJRCAgPT4gMiwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFN0YXRlSUQsCiAgICAiU3RhdGVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHN0YXRlIgopOwoKbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICBJRCA9PiAkU3RhdGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhdGVEYXRhICksCiAgICAiU3RhdGVHZXQoKSAtIGZvciB0ZXN0aW5nIHN0YXRlIgopOwoKIyBjcmVhdGUgcHJpb3JpdHkgb2JqZWN0Cm15ICRQcmlvcml0eU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwoKIyBjcmVhdGUgbmV3IHByaW9yaXR5Cm15ICRQcmlvcml0eUlEID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RQcmlvcml0eScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRQcmlvcml0eUlELAogICAgIlByaW9yaXR5QWRkKCkgLSBjcmVhdGUgdGVzdGluZyBwcmlvcml0eSIsCik7CgpteSAlUHJpb3JpdHlEYXRhID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUdldCgKICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5SUQsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVByaW9yaXR5RGF0YSApLAogICAgIlByaW9yaXR5R2V0KCkgLSBmb3IgdGVzdGluZyBwcmlvcml0eSIKKTsKCiMgY3JlYXRlIGR5bmFtaWMgZmllbGQgb2JqZWN0Cm15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgojIGFkZCB0ZXh0IGR5bmFtaWMgZmllbGQKbXkgJUR5bmFtaWNGaWVsZFRleHRDb25maWcgPSAoCiAgICBOYW1lICAgICAgID0+ICJVbml0dGVzdDEkUmFuZG9tSUQiLAogICAgRmllbGRPcmRlciA9PiA5OTkxLAogICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgTGFiZWwgICAgICA9PiAnRGVzY3JpcHRpb24nLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlID0+ICcnLAogICAgfSwKKTsKbXkgJEZpZWxkVGV4dElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgJUR5bmFtaWNGaWVsZFRleHRDb25maWcsCiAgICBVc2VySUQgID0+IDEsCiAgICBSZW9yZGVyID0+IDAsCik7CiRTZWxmLT5UcnVlKAogICAgJEZpZWxkVGV4dElELAogICAgIkR5bmFtaWMgRmllbGQgJEZpZWxkVGV4dElEIgopOwoKIyBhZGQgSUQKJER5bmFtaWNGaWVsZFRleHRDb25maWd7SUR9ID0gJEZpZWxkVGV4dElEOwoKIyBhZGQgZHJvcGRvd24gZHluYW1pYyBmaWVsZApteSAlRHluYW1pY0ZpZWxkRHJvcGRvd25Db25maWcgPSAoCiAgICBOYW1lICAgICAgID0+ICJVbml0dGVzdDIkUmFuZG9tSUQiLAogICAgRmllbGRPcmRlciA9PiA5OTkyLAogICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IFsKICAgICAgICAgICAgMSA9PiAnT25lJywKICAgICAgICAgICAgMiA9PiAnVHdvJywKICAgICAgICAgICAgMyA9PiAnVGhyZWUnLAogICAgICAgIF0sCiAgICB9LAopOwpteSAkRmllbGREcm9wZG93bklEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgJUR5bmFtaWNGaWVsZERyb3Bkb3duQ29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGaWVsZERyb3Bkb3duSUQsCiAgICAiRHluYW1pYyBGaWVsZCAkRmllbGREcm9wZG93bklEIgopOwoKIyBhZGQgSUQKJER5bmFtaWNGaWVsZERyb3Bkb3duQ29uZmlne0lEfSA9ICRGaWVsZERyb3Bkb3duSUQ7CgojIGFkZCBtdWx0aXNlbGVjdCBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGRNdWx0aXNlbGVjdENvbmZpZyA9ICgKICAgIE5hbWUgICAgICAgPT4gIlVuaXR0ZXN0MyRSYW5kb21JRCIsCiAgICBGaWVsZE9yZGVyID0+IDk5OTMsCiAgICBGaWVsZFR5cGUgID0+ICdNdWx0aXNlbGVjdCcsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgTGFiZWwgICAgICA9PiAnTXVsdGlzZWxlY3QgbGFiZWwnLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gWwogICAgICAgICAgICAxID0+ICdWYWx1ZTnDn8O8w58nLAogICAgICAgICAgICAyID0+ICdEaWZmZXJlbnRWYWx1ZScsCiAgICAgICAgICAgIDMgPT4gJzEyMzQ1NjcnLAogICAgICAgIF0sCiAgICB9LAopOwpteSAkRmllbGRNdWx0aXNlbGVjdElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgJUR5bmFtaWNGaWVsZE11bHRpc2VsZWN0Q29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGaWVsZE11bHRpc2VsZWN0SUQsCiAgICAiRHluYW1pYyBGaWVsZCAkRmllbGRNdWx0aXNlbGVjdElEIgopOwoKIyBhZGQgSUQKJER5bmFtaWNGaWVsZE11bHRpc2VsZWN0Q29uZmlne0lEfSA9ICRGaWVsZE11bHRpc2VsZWN0SUQ7CgojIGFkZCBkYXRlLXRpbWUgZHluYW1pYyBmaWVsZApteSAlRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWcgPSAoCiAgICBOYW1lICAgICAgID0+ICJVbml0dGVzdDQkUmFuZG9tSUQiLAogICAgRmllbGRPcmRlciA9PiA5OTk0LAogICAgRmllbGRUeXBlICA9PiAnRGF0ZVRpbWUnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSAgPT4gMCwKICAgICAgICBZZWFyc0luRnV0dXJlID0+IDAsCiAgICAgICAgWWVhcnNJblBhc3QgICA9PiAwLAogICAgICAgIFllYXJzUGVyaW9kICAgPT4gMCwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCik7Cm15ICRGaWVsZERhdGVUaW1lSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAlRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWcsCiAgICBVc2VySUQgID0+IDEsCiAgICBSZW9yZGVyID0+IDAsCik7CiRTZWxmLT5UcnVlKAogICAgJEZpZWxkRGF0ZVRpbWVJRCwKICAgICJEeW5hbWljIEZpZWxkICRGaWVsZERhdGVUaW1lSUQiCik7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7SUR9ID0gJEZpZWxkRGF0ZVRpbWVJRDsKCiMgYWRkIGRhdGUtdGltZSBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGREYXRlQ29uZmlnID0gKAogICAgTmFtZSAgICAgICA9PiAiVW5pdHRlc3Q1JFJhbmRvbUlEIiwKICAgIEZpZWxkT3JkZXIgPT4gOTk5NSwKICAgIEZpZWxkVHlwZSAgPT4gJ0RhdGUnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSAgPT4gMCwKICAgICAgICBZZWFyc0luRnV0dXJlID0+IDAsCiAgICAgICAgWWVhcnNJblBhc3QgICA9PiAwLAogICAgICAgIFllYXJzUGVyaW9kICAgPT4gMCwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCik7Cm15ICRGaWVsZERhdGVJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGREYXRlQ29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwokU2VsZi0+VHJ1ZSgKICAgICRGaWVsZERhdGVJRCwKICAgICJEeW5hbWljIEZpZWxkICRGaWVsZERhdGVJRCIsCik7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkRGF0ZUNvbmZpZ3tJRH0gPSAkRmllbGREYXRlSUQ7CgojIGNyZWF0ZSB3ZWIgc2VydmljZSBvYmplY3QKbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgcmVmICRXZWJzZXJ2aWNlT2JqZWN0LAogICAgJ0NyZWF0ZSB3ZWIgc2VydmljZSBvYmplY3QnCik7CgojIHNldCB3ZWIgc2VydmljZSBuYW1lCm15ICRXZWJzZXJ2aWNlTmFtZSA9ICctVGVzdC0nIC4gJFJhbmRvbUlEOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIHdlYiBzZXJ2aWNlIiwKKTsKCiMgZ2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcwpteSAkSG9zdCA9ICRIZWxwZXItPkdldFRlc3RIVFRQSG9zdG5hbWUoKTsKCiMgcHJlcGFyZSB3ZWIgc2VydmljZSBjb25maWcKbXkgJFJlbW90ZVN5c3RlbSA9CiAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0h0dHBUeXBlJykKICAgIC4gJzovLycKICAgIC4gJEhvc3QKICAgIC4gJy8nCiAgICAuICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKQogICAgLiAnL25waC1nZW5lcmljaW50ZXJmYWNlLnBsL1dlYnNlcnZpY2VJRC8nCiAgICAuICRXZWJzZXJ2aWNlSUQ7CgpteSAkV2Vic2VydmljZUNvbmZpZyA9IHsKCiAgICAjICAgIE5hbWUgPT4gJycsCiAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICdUZXN0IGZvciBUaWNrZXQgQ29ubmVjdG9yIHVzaW5nIFNPQVAgdHJhbnNwb3J0IGJhY2tlbmQuJywKICAgIERlYnVnZ2VyID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgUHJvdmlkZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwMDAwMDAsCiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gewogICAgICAgICAgICBUaWNrZXRDcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0OjpUaWNrZXRDcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Nlc3Npb246OlNlc3Npb25DcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgUmVxdWVzdGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuY29kaW5nICA9PiAnVVRGLTgnLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgICAgICBUaW1lb3V0ICAgPT4gMTIwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYiBzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZVVwZGF0ZSwKICAgICJVcGRhdGVkIHdlYiBzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiCik7CgojIEdldCBTZXNzaW9uSUQKIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdApteSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICByZWYgJFJlcXVlc3RlclNlc3Npb25PYmplY3QsCiAgICAnU2Vzc2lvbklEIC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QnCik7CgojIGNyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAopOwpteSAkUGFzc3dvcmQgPSAkVXNlckxvZ2luOwoKIyBjcmVhdGUgYSBuZXcgdXNlciB3aXRob3V0IHBlcm1pc3Npb25zIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbjIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkUGFzc3dvcmQyICA9ICRVc2VyTG9naW4yOwoKIyBjcmVhdGUgYSBjdXN0b21lciB3aGVyZSBhIHRpY2tldCB3aWxsIHVzZSBhbmQgd2lsbCBoYXZlIHBlcm1pc3Npb25zCm15ICRDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJEN1c3RvbWVyUGFzc3dvcmQgID0gJEN1c3RvbWVyVXNlckxvZ2luOwoKIyBjcmVhdGUgYSBjdXN0b21lciB0aGF0IHdpbGwgbm90IGhhdmUgcGVybWlzc2lvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luMiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJEN1c3RvbWVyUGFzc3dvcmQyICA9ICRDdXN0b21lclVzZXJMb2dpbjI7CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwpteSBAVGVzdHMgICAgICAgID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdFbXB0eSBSZXF1ZXN0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4ge30sCiAgICAgICAgRXhwZWN0ZWREYXRhICAgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTm8gQXJ0aWNsZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFRpY2tldCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ICA9PiAxLAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEFydGljbGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIER5bmFtaWNGaWVsZCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXR0YWNobWVudCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFRpdGxlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBDdXN0b21lclVzZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ3VzdG9tZXJVc2VyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgUXVldWUgb3IgUXVldWVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBRdWV1ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUXVldWVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgTG9jaycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIExvY2tJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIExvY2tJRCAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFR5cGUgb3IgVHlwZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgVHlwZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU2VydmljZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU2VydmljZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU0xBJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQSAgICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFNMQUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFN0YXRlIG9yIFN0YXRlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU3RhdGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFN0YXRlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFByaW9yaXR5IG9yIFByaW9yaXR5SUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUHJpb3JpdHknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFByaW9yaXR5SUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIE93bmVyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lciAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBPd25lcklEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBSZXNwb25zaWJsZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUmVzcG9uc2liZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUGVuZGluZ1RpbWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTMsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQZW5kaW5nVGltZSBEaWZmJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGlmZiA9PiAtMTIzNDU2LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUGVuZGluZ1RpbWUgRGlmZiArIEZ1bGwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEaWZmICAgPT4gMTIzNDU2LAogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMywKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIFN1YmplY3QnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBCb2R5JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEF1dG9SZXNwb25zZVR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEF1dG9SZXNwb25zZVR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU2VuZGVyVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU2VuZGVyVHlwZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBGcm9tJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ29udGVudFR5cGUgb3IgTUlNRVR5cGUgYW5kIENoYXJzZXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29udGVudFR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQ29udGVudFR5cGUgb3IgTUlNRVR5cGUgYW5kIENoYXJzZXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgSGlzdG9yeVR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBUaW1lVW5pdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgVGltZVVuaXQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW0gPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCBJbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbICdJbnZhbGlkJyAuICRSYW5kb21JRCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBJdGVtID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCBpbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsgJ0ludmFsaWQnIC4gJFJhbmRvbUlEIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW0gPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCBpbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyAnSW52YWxpZCcgLiAkUmFuZG9tSUQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBEeW5hbWljRmllbGQgbmFtZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIER5bmFtaWNGaWVsZCB2YWx1ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRHluYW1pY0ZpZWxkIG5hbWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBEeW5hbWljRmllbGQgdmFsdWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnRUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IEZpbGVuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgYXR0YWNobWVudCBDb250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIFBlbmRpbmdUaW1lIERpZmYnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEaWZmID0+IDEwMDgwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIChVc2luZyBTZXNzaW9uKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIENEQVRBIHRhZ3MnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdUZXN0IGNvbnRlbnQgPFtbaHR0cHM6Ly9leGFtcGxlLmNvbS9dXT4nLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBBdXRoID0+IHsKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICROZXdTZXNzaW9uSUQsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBOYW1lcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICRTTEFEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRTdGF0ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJFByaW9yaXR5RGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdE93bmVyTG9naW4sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ0FydGljbGUgc3ViamVjdCDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICAgICAgQm9keSAgICA9PiAnQXJ0aWNsZSBib2R5IMmfIMmgIMmhIMmiIMmjIMmkIMmlIMmmIMmnIMqAIMqBIMqCIMqDIMqEIMqFIMqGIMqHIMqIIMqJIMqKIMqLIMqMIMqNIMqOJywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBleHRlcm5hbCBjdXN0b21lciB1c2VyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCAgID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgICA9PiAxLAogICAgICAgIEV4dGVybmFsQ3VzdG9tZXIgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnc29tZW9uZUBzb21laG90cy5jb20nLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAkUHJpb3JpdHlEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0T3duZXJMb2dpbiwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlICA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnQXJ0aWNsZSBzdWJqZWN0IMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICdBcnRpY2xlIGJvZHkgyZ8gyaAgyaEgyaIgyaMgyaQgyaUgyaYgyacgyoAgyoEgyoIgyoMgyoQgyoUgyoYgyocgyoggyokgyoogyosgyowgyo0gyo4nLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBUaW1lVW5pdHMgMCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICRTTEFEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRTdGF0ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJFByaW9yaXR5RGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdE93bmVyTG9naW4sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggVGltZVVuaXRzIGZyYWN0aW9uYWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAkUXVldWVzWzBdLT57TmFtZX0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFR5cGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFNMQSAgICAgICAgICA9PiAkU0xBRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAkU3RhdGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICRQcmlvcml0eURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBPd25lciAgICAgICAgPT4gJFRlc3RPd25lckxvZ2luLAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3Qgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgICAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIEFnZW50IChObyBQZXJtaXNzaW9uKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbjIsCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQyLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCgogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcyBDdXN0b21lciAoV2l0aCBQZXJtaXNzaW9ucyknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBBdXRoID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgICAgICAgICA9PiAkQ3VzdG9tZXJQYXNzd29yZCwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcyBDdXN0b21lciAoTm8gUGVybWlzc2lvbiknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzFdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBBdXRoID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlckxvZ2luMiwKICAgICAgICAgICAgUGFzc3dvcmQgICAgICAgICAgPT4gJEN1c3RvbWVyUGFzc3dvcmQyLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ3JlYXRlIER5bmFtaWNGaWVsZHMgKHdpdGggZW1wdHkgdmFsdWUpJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MSRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDIkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QzJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0NyZWF0ZSBEeW5hbWljRmllbGRzICh3aXRoIG5vdCBlbXB0eSB2YWx1ZSknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnVmFsdWU5w5/DvMOfLeOCq+OCueOCvzEyMzQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QyJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDMkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IFsgMSwgMiBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAoKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ3JlYXRlIER5bmFtaWNGaWVsZHMgKHdpdGggd3JvbmcgdmFsdWUpJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnZW5qb3lAb3Rycy5jb20nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MSRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4geyBXcm9uZyA9PiAnVmFsdWUnIH0sICAgICMgdmFsdWUgdHlwZSBkZXBlbmRzIG9uIHRoZSBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDIkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IHsgV3JvbmcgPT4gJ1ZhbHVlJyB9LCAgICAjIHZhbHVlIHR5cGUgZGVwZW5kcyBvbiB0aGUgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggQWxpYXMgQ2hhcnNldHMgYXR0YWNobWVudCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VUy1BU0NJSScsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQXJ0aWNsZSB3aXRoIEVtYWlsIGNvbW11bmljYXRpb24gY2hhbm5lbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VUy1BU0NJSScsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FydGljbGUgd2l0aCBJbnRlcm5hbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb21tdW5pY2F0aW9uQ2hhbm5lbCAgICAgICAgICAgID0+ICdJbnRlcm5hbCcsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVTLUFTQ0lJJywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FydGljbGUgd2l0aCBQaG9uZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb21tdW5pY2F0aW9uQ2hhbm5lbCAgICAgICAgICAgID0+ICdQaG9uZScsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVTLUFTQ0lJJywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FydGljbGUgd2l0aCB3cm9uZyBjb21tdW5pY2F0aW9uIGNoYW5uZWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb21tdW5pY2F0aW9uQ2hhbm5lbCAgICAgICAgICAgID0+ICdUZXN0MTIzJywKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2Vuam95QG90cnMuY29tJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVTLUFTQ0lJJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKKTsKCiMgZGVidWdnZXIgb2JqZWN0Cm15ICREZWJ1Z2dlck9iamVjdCA9IEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXItPm5ldygKICAgIERlYnVnZ2VyQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgV2Vic2VydmljZUlEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIENvbW11bmljYXRpb25UeXBlID0+ICdQcm92aWRlcicsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkRGVidWdnZXJPYmplY3QsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcicsCiAgICAnRGVidWdnZXJPYmplY3QgaW5zdGFudGlhdGUgY29ycmVjdGx5JwopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgIG15ICRMb2NhbE9iamVjdCA9ICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICByZWYgJExvY2FsT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIGxvY2FsIG9iamVjdCIKICAgICk7CgogICAgbXkgJUF1dGggPSAoCiAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgICk7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e0F1dGh9ICkgKSB7CiAgICAgICAgJUF1dGggPSAleyAkVGVzdC0+e0F1dGh9IH07CiAgICB9CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2ViIHNlcnZpY2UKICAgIG15ICRMb2NhbFJlc3VsdCA9ICRMb2NhbE9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUF1dGgsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRMb2NhbFJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBzdHJ1Y3R1cmUgaXMgdmFsaWQiCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIKICAgICk7CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2ViIHNlcnZpY2UKICAgIG15ICRSZXF1ZXN0ZXJSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIgogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e1N1Y2Nlc3N9LAogICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHN1Y2Nlc3NmdWwgcmVzdWx0IgogICAgKTsKCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIHN1Y2NlZWQKICAgIGlmICggJFRlc3QtPntTdWNjZXNzQ3JlYXRlfSApIHsKCiAgICAgICAgIyBsb2NhbCByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXRJRCB3aXRoIFRydWUuIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgVGlja2V0TnVtYmVyIHdpdGggVHJ1ZS4iCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBBcnRpY2xlSUQgd2l0aCBUcnVlLiIKICAgICAgICApOwogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIgogICAgICAgICk7CgogICAgICAgICMgcmVxdWVzdGVyIHJlc3VsdHMKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgVGlja2V0SUQgd2l0aCBUcnVlLiIKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgVGlja2V0TnVtYmVyIHdpdGggVHJ1ZS4iCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciByZXN1bHQgRXJyb3IgaXMgdW5kZWZpbmVkLiIKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0aWNrZXQgb2JqZWN0CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBnZXQgdGhlIFRpY2tldCBlbnRyeSAoZnJvbSBsb2NhbCByZXN1bHQpCiAgICAgICAgbXkgJUxvY2FsVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIHNjYWxhciAlTG9jYWxUaWNrZXREYXRhLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGNyZWF0ZWQgbG9jYWwgdGlja2V0IHN0cnVjdHVyZSB3aXRoIFRydWUuIgogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBUaWNrZXQgZW50cnkgKGZyb20gcmVxdWVzdGVyIHJlc3VsdCkKICAgICAgICBteSAlUmVxdWVzdGVyVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBzY2FsYXIgJVJlcXVlc3RlclRpY2tldERhdGEsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gY3JlYXRlZCByZXF1ZXN0ZXIgdGlja2V0IHN0cnVjdHVyZSB3aXRoIFRydWUuIgogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgdGlja2V0IGF0dHJpYnV0ZXMgYXMgZGVmaW5lZCBpbiB0aGUgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXtUaXRsZX0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+e1RpdGxlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPlRpdGxlIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iCgogICAgICAgICk7CgogICAgICAgICMgZXh0ZXJuYWwgY3VzdG9tZXJzIG9ubHkgc2V0IGl0J3MgdmFsdWUgaW4gYXJ0aWNsZSAoaWYgbm8gRnJvbSBpcyBkZWZpbmVkKSwgdGlja2V0CiAgICAgICAgIyBpcyBjcmVhdGVkIHdpdGggYW4gZW1wdHkgY3VzdG9tZXIKICAgICAgICBpZiAoICRUZXN0LT57RXh0ZXJuYWxDdXN0b21lcn0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgdW5kZWYsCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIFRpY2tldC0+Q3VzdG9tZXJVc2VyIGlzIGVtcHR5LiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT5DdXN0b21lclVzZXIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhRdWV1ZSBUeXBlIFNlcnZpY2UgU0xBIFN0YXRlIFByaW9yaXR5IE93bmVyIFJlc3BvbnNpYmxlKSkgewogICAgICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7ICRBdHRyaWJ1dGUgLiAnSUQnIH0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57ICRBdHRyaWJ1dGUgLiAnSUQnIH0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPiRBdHRyaWJ1dGUiIC4gJ0lEJyAuICIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPiRBdHRyaWJ1dGUgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICAgICBteSAkTG9jYWxBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGxvY2FsIGFydGljbGUgaW5mb3JtYXRpb24KICAgICAgICBteSAlTG9jYWxBcnRpY2xlRGF0YSA9ICRMb2NhbEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRSZXF1ZXN0ZXJBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgcmVxdWVzdGVyIGFydGljbGUgaW5mb3JtYXRpb24KICAgICAgICBteSAlUmVxdWVzdGVyQXJ0aWNsZURhdGEgPSAkUmVxdWVzdGVyQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoU3ViamVjdCBCb2R5IENvbnRlbnRUeXBlIE1pbWVUeXBlIENoYXJzZXQgRnJvbSkpIHsKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgQXJ0aWNsZS0+JEF0dHJpYnV0ZSBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KFNlbmRlclR5cGUpKSB7CiAgICAgICAgICAgIGlmICggJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRMb2NhbEFydGljbGVEYXRheyAkQXR0cmlidXRlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnsgJEF0dHJpYnV0ZSAuICdJRCcgfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIEFydGljbGUtPiRBdHRyaWJ1dGUiIC4gJ0lEJyAuICIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgQXJ0aWNsZS0+JEF0dHJpYnV0ZSBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgIG15IEBSZXF1ZXN0ZWREeW5hbWljRmllbGRzOwogICAgICAgIGlmICggcmVmICRUZXN0LT57UmVxdWVzdERhdGF9LT57RHluYW1pY0ZpZWxkfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgIHB1c2ggQFJlcXVlc3RlZER5bmFtaWNGaWVsZHMsICRUZXN0LT57UmVxdWVzdERhdGF9LT57RHluYW1pY0ZpZWxkfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBSZXF1ZXN0ZWREeW5hbWljRmllbGRzID0gQHsgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9IH07CiAgICAgICAgfQogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkIChAUmVxdWVzdGVkRHluYW1pY0ZpZWxkcykgewoKICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkLT57RmllbGRUeXBlfSBlcSAnRGF0ZScgJiYgJER5bmFtaWNGaWVsZC0+e1ZhbHVlfSA9fiBteyBcQSBcZHs0fS1cZHsyfS1cZHsyfSBceiB9eG1zICkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e1ZhbHVlfSAuPSAnIDAwOjAwOjAwJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gLy8gJycsCiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBsb2NhbCBUaWNrZXQtPkR5bmFtaWNGaWVsZF8iCiAgICAgICAgICAgICAgICAgICAgLiAkRHluYW1pY0ZpZWxkLT57TmFtZX0KICAgICAgICAgICAgICAgICAgICAuICIgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgYXR0YWNobWVudHMKICAgICAgICBteSAlQXR0YWNobWVudEluZGV4ID0gJExvY2FsQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgICAgIEV4Y2x1ZGVIVE1MQm9keSAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAQXR0YWNobWVudHM7CiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAlQXR0YWNobWVudEluZGV4ICkgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJExvY2FsQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkRmlsZUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdHRhY2htZW50ICk7CgogICAgICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBiYXNlNjQKICAgICAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudH0gPSBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSwgJycgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIG5vdCBuZWVkZWQgYXR0cmlidXRlcwogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ29udGVudEFsdGVybmF0aXZlIENvbnRlbnRJRCBGaWxlc2l6ZSBGaWxlc2l6ZVJhdykpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXR0YWNobWVudHskQXR0cmlidXRlfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgeyVBdHRhY2htZW50fTsKICAgICAgICB9CgogICAgICAgIG15IEBSZXF1ZXN0ZWRBdHRhY2htZW50czsKICAgICAgICBpZiAoIHJlZiAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgcHVzaCBAUmVxdWVzdGVkQXR0YWNobWVudHMsICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXR0YWNobWVudH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBAUmVxdWVzdGVkQXR0YWNobWVudHMgPSBAeyAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9IH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgIFxAUmVxdWVzdGVkQXR0YWNobWVudHMsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gbG9jYWwgVGlja2V0LT5BdHRhY2htZW50IG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1vdmUgYXR0cmlidXRlcyB0aGF0IG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIGxvY2FsIGFuZCByZXF1ZXN0ZXIgcmVzcG9uc2VzCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKAogICAgICAgICAgICBxdyhUaWNrZXRJRCBUaWNrZXROdW1iZXIgQ3JlYXRlZCBDaGFuZ2VkIEFnZSBVbmxvY2tUaW1lb3V0KQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBkZWxldGUgJExvY2FsVGlja2V0RGF0YXskQXR0cmlidXRlfTsKICAgICAgICAgICAgZGVsZXRlICRSZXF1ZXN0ZXJUaWNrZXREYXRheyRBdHRyaWJ1dGV9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICBcJUxvY2FsVGlja2V0RGF0YSwKICAgICAgICAgICAgXCVSZXF1ZXN0ZXJUaWNrZXREYXRhLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHRpY2tldCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIgogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBsb2NhbCBhbmQgcmVxdWVzdGVyIHJlc3BvbnNlcwogICAgICAgIGZvciBteSAkQXR0cmlidXRlICgKICAgICAgICAgICAgcXcoIEFnZSBBZ2VUaW1lVW5peCBBcnRpY2xlSUQgVGlja2V0SUQgQ3JlYXRlVGltZSBDaGFuZ2VUaW1lIEluY29taW5nVGltZSBUaWNrZXROdW1iZXIKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBkZWxldGUgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIGRlbGV0ZSAkUmVxdWVzdGVyQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlTG9jYWxBcnRpY2xlRGF0YSwKICAgICAgICAgICAgXCVSZXF1ZXN0ZXJBcnRpY2xlRGF0YSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCBhcnRpY2xlIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGhlIHRpY2tldHMKICAgICAgICBmb3IgbXkgJFRpY2tldElEICgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBBbGxvdyBzb21lIHRpbWUgZm9yIGFsbCBoaXN0b3J5IGVudHJpZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgdGlja2V0IGJlZm9yZSBkZWxldGluZyBpdCwKICAgICAgICAgICAgIyAgIG90aGVyd2lzZSBUaWNrZXREZWxldGUgY291bGQgZmFpbC4KICAgICAgICAgICAgc2xlZXAgMTsKCiAgICAgICAgICAgIG15ICRUaWNrZXREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVGlja2V0RGVsZXRlLAogICAgICAgICAgICAgICAgIlRpY2tldERlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBJRCAkVGlja2V0SUQiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgdGVzdHMgc3VwcG9zZWQgdG8gZmFpbAogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IFRpY2tldElEIHdpdGggZmFsc2UuIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXROdW1iZXIgd2l0aCBmYWxzZS4iCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEFydGljbGVJRCB3aXRoIGZhbHNlLiIKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkRGF0YX0tPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yQ29kZSBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgbG9jYWwgY2FsbCByZXN1bHQuIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIHdpdGggdHJ1ZS4iCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSBpcyBub3QgZW1wdHkuIgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yQ29kZX0KICAgICAgICAgICAgICAgIC4gJzogJwogICAgICAgICAgICAgICAgLiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSAob3V0c2lkZSBEYXRhIGhhc2gpIG1hdGNoZWQgd2l0aCBjb25jYXRlbmF0aW9uIgogICAgICAgICAgICAgICAgLiAiIG9mIEVycm9yQ29kZSBhbmQgRXJyb3JNZXNzYWdlIHdpdGhpbiBEYXRhIGhhc2guIgogICAgICAgICk7CgogICAgICAgICMgcmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbAogICAgICAgICMgcmVzdWx0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBTT0FQIGNhbGwgcmVzdWx0CiAgICAgICAgaWYgKCAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgICAgICBkZWxldGUgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfTsKICAgICAgICB9CgogICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvck1lc3NhZ2UgKG91dHNpZGUgRGF0YSBoYXNoKSBnb3QgcmVtb3ZlZCB0byBjb21wYXJlIgogICAgICAgICAgICAgICAgLiAiIGxvY2FsIGFuZCByZW1vdGUgdGVzdHMuIgogICAgICAgICk7CgogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iCiAgICAgICAgKTsKICAgIH0KfQoKIyBkZWxldGUgd2ViIHNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCB3ZWIgc2VydmljZSAkV2Vic2VydmljZUlEIiwKKTsKCiMgZ2V0IERCIG9iamVjdApteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKJFNlbGYtPklzKAogICAgcmVmICREQk9iamVjdCwKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgIkRCT2JqZWN0IGNyZWF0ZWQgY29ycmVjdGx5IiwKKTsKCm15ICRTdWNjZXNzOwoKIyBkZWxldGUgcXVldWVzCmZvciBteSAkUXVldWVEYXRhIChAUXVldWVzKSB7CiAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBxdWV1ZSBXSEVSRSBpZCA9ICRRdWV1ZURhdGEtPntRdWV1ZUlEfSIsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlF1ZXVlIHdpdGggSUQgJFF1ZXVlRGF0YS0+e1F1ZXVlSUR9IGlzIGRlbGV0ZWQhIgogICAgKTsKfQoKIyBkZWxldGUgZ3JvdXAKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBncm91cHMgV0hFUkUgaWQgPSAkR3JvdXBJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiR3JvdXAgd2l0aCBJRCAkR3JvdXBJRCBpcyBkZWxldGVkISIKKTsKCiMgZGVsZXRlIHR5cGUKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfdHlwZSBXSEVSRSBpZCA9ICRUeXBlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlR5cGUgd2l0aCBJRCAkVHlwZUlEIGlzIGRlbGV0ZWQhIgopOwoKIyBkZWxldGUgc2VydmljZV9jdXN0b21lcl91c2VyIGFuZCBzZXJ2aWNlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTZXJ2aWNlIHVzZXIgcmVmZXJlbmNlZCB0byBzZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiCik7CgokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIE9SIHNsYV9pZCA9ICRTTEFJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU2VydmljZSBTTEEgcmVmZXJlbmNlZCB0byBzZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiCik7CgokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTZXJ2aWNlIHdpdGggSUQgJFNlcnZpY2VJRCBpcyBkZWxldGVkISIKKTsKCiMgZGVsZXRlIFNMQQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU0xBIHdpdGggSUQgJFNMQUlEIGlzIGRlbGV0ZWQhIiwKKTsKCiMgZGVsZXRlIHN0YXRlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3N0YXRlIFdIRVJFIGlkID0gJFN0YXRlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlN0YXRlIHdpdGggSUQgJFN0YXRlSUQgaXMgZGVsZXRlZCEiCik7CgojIGRlbGV0ZSBwcmlvcml0eQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHRpY2tldF9wcmlvcml0eSBXSEVSRSBpZCA9ICRQcmlvcml0eUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJQcmlvcml0eSB3aXRoIElEICRQcmlvcml0eUlEIGlzIGRlbGV0ZWQhIgopOwoKIyBkZWxldGUgZHluYW1pYyBmaWVsZHMKbXkgJERlbGV0ZUZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCik7CgpteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCkRZTkFNSUNGSUVMRDoKZm9yIG15ICREeW5hbWljRmllbGRJRCAoIHNvcnQga2V5cyAleyREZWxldGVGaWVsZExpc3R9ICkgewoKICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkSUQ7CiAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJERlbGV0ZUZpZWxkTGlzdC0+eyREeW5hbWljRmllbGRJRH07CgogICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJERlbGV0ZUZpZWxkTGlzdC0+eyREeW5hbWljRmllbGRJRH0gIX4gbXsgXlVuaXR0ZXN0IH14bXM7CgogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICApOwogICAgbXkgJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MgPSAkQmFja2VuZE9iamVjdC0+QWxsVmFsdWVzRGVsZXRlKAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiRHluYW1pY0ZpZWxkRGVsZXRlKCkgZm9yICREZWxldGVGaWVsZExpc3QtPnskRHluYW1pY0ZpZWxkSUR9IHdpdGggdHJ1ZSIKICAgICk7Cn0KCiMgY2xlYW51cCBjYWNoZQokS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgpOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxYjJiZGU5YWJkMDNiNTdjYmEyNjQ4YWYzZTlkYjQwYjViMjMwOTY3IC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRDcmVhdGVJbmNsdWRlVGlja2V0RGF0YS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgojIyBubyBjcml0aWMgKE1vZHVsZXM6OlJlcXVpcmVFeHBsaWNpdFBhY2thZ2UpCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCnVzZSBTb2NrZXQ7CnVzZSBNSU1FOjpCYXNlNjQ7Cgp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlcjsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldENyZWF0ZTsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwoKIyBTa2lwIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFNraXBTU0xWZXJpZnkgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6VHlwZScsCiAgICBWYWx1ZSA9PiAxLAopOwoKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnLAogICAgVmFsdWUgPT4gMSwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6Ok5lZWRBY2NvdW50ZWRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CgojIGRpc2FibGUgRE5TIGxvb2t1cHMKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ2hlY2tNWFJlY29yZCcsCiAgICBWYWx1ZSA9PiAwLAopOwoKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBkaXNhYmxlIFNlc3Npb25DaGVja1JlbW90ZUlQIHNldHRpbmcKJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnLAogICAgVmFsdWUgPT4gMCwKKTsKCiMgZW5hYmxlIGN1c3RvbWVyIGdyb3VwcyBzdXBwb3J0CiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0N1c3RvbWVyR3JvdXBTdXBwb3J0JywKICAgIFZhbHVlID0+IDEsCik7CgojIGNoZWNrIGlmIFNTTCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQKJFNlbGYtPklzKAogICAgJEVOVntQRVJMX0xXUF9TU0xfVkVSSUZZX0hPU1ROQU1FfSwKICAgIDAsCiAgICAnRGlzYWJsZWQgU1NMIGNlcnRpZmljYXRlcyB2ZXJpZmljYXRpb24gaW4gZW52aXJvbm1lbnQnCik7CgpteSAkVGVzdE93bmVyTG9naW4gICAgICAgID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RSZXNwb25zaWJsZUxvZ2luICA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0VXNlckxvZ2luICAgICAgICAgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsIF0sCik7Cm15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCm15ICRPd25lcklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJFRlc3RPd25lckxvZ2luLAopOwpteSAkUmVzcG9uc2libGVJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKKTsKbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAopOwoKbXkgJEludmFsaWRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ2ludmFsaWQnICk7CgojIHNhbml0eSB0ZXN0CiRTZWxmLT5Jc05vdCgKICAgICRJbnZhbGlkSUQsCiAgICB1bmRlZiwKICAgICJWYWxpZExvb2t1cCgpIGZvciAnaW52YWxpZCcgc2hvdWxkIG5vdCBiZSB1bmRlZiIKKTsKCiMgZ2V0IGdyb3VwIG9iamVjdApteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiMgY3JlYXRlIGEgbmV3IGdyb3VwCm15ICRHcm91cElEID0gJEdyb3VwT2JqZWN0LT5Hcm91cEFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RTcGVjaWFsJyAuICRSYW5kb21JRCwKICAgIENvbW1lbnQgPT4gJ2NvbW1lbnQgZGVzY3JpYmluZyB0aGUgZ3JvdXAnLCAgICAjIG9wdGlvbmFsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAlR3JvdXBEYXRhID0gJEdyb3VwT2JqZWN0LT5Hcm91cEdldCggSUQgPT4gJEdyb3VwSUQgKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlR3JvdXBEYXRhICksCiAgICAiR3JvdXBHZXQoKSAtIGZvciB0ZXN0aW5nIGdyb3VwIiwKKTsKCiMgY3JlYXRlIHF1ZXVlIG9iamVjdApteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCm15IEBRdWV1ZXM7CgpteSBAUXVldWVQcm9wZXJ0aWVzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ3F1ZXVlMScgLiAkUmFuZG9tSUQsCiAgICAgICAgR3JvdXBJRCA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdxdWV1ZTInIC4gJFJhbmRvbUlELAogICAgICAgIEdyb3VwSUQgPT4gJEdyb3VwSUQsCiAgICB9Cik7CgojIGNyZWF0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZVByb3BlcnR5IChAUXVldWVQcm9wZXJ0aWVzKSB7CiAgICBteSAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICAgICAgJXskUXVldWVQcm9wZXJ0eX0sCiAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgIlF1ZXVlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBxdWV1ZSIsCiAgICApOwogICAgbXkgJVF1ZXVlRGF0YSA9ICRRdWV1ZU9iamVjdC0+UXVldWVHZXQoIElEID0+ICRRdWV1ZUlEICk7CgogICAgcHVzaCBAUXVldWVzLCBcJVF1ZXVlRGF0YTsKfQoKIyBnZXQgdHlwZSBvYmplY3QKbXkgJFR5cGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwoKIyBjcmVhdGUgbmV3IHR5cGUKbXkgJFR5cGVJRCA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFR5cGUnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlELAogICAgIlR5cGVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHR5cGUiLAopOwoKbXkgJVR5cGVEYXRhID0gJFR5cGVPYmplY3QtPlR5cGVHZXQoCiAgICBJRCA9PiAkVHlwZUlELAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUeXBlRGF0YSApLAogICAgIlR5cGVHZXQoKSAtIGZvciB0ZXN0aW5nIHR5cGUiLAopOwoKIyBjcmVhdGUgc2VydmljZSBvYmplY3QKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNlcnZpY2VUeXBlTGlzdCB9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNMQVR5cGVMaXN0IH07CiMgLS0tCgojIGNyZWF0ZSBuZXcgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBzZXJ2aWNlIiwKKTsKCm15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU2VydmljZURhdGEgKSwKICAgICJTZXJ2aWNlR2V0KCkgLSBmb3IgdGVzdGluZyBzZXJ2aWNlIiwKKTsKCiMgc2V0IHNlcnZpY2UgZm9yIHRoZSBjdXN0b21lcgokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGNyZWF0ZSBTTEEgb2JqZWN0Cm15ICRTTEFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CgojIGNyZWF0ZSBuZXcgU0xBCm15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgICAgPT4gJ1Rlc3RTTEEnIC4gJFJhbmRvbUlELAogICAgU2VydmljZUlEcyA9PiBbJFNlcnZpY2VJRF0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKIyAtLS0KICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNMQUlELAogICAgIlNMQUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgU0xBIiwKKTsKCm15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgU0xBSUQgID0+ICRTTEFJRCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVTTEFEYXRhICksCiAgICAiU0xBR2V0KCkgLSBmb3IgdGVzdGluZyBTTEEiLAopOwoKIyBjcmVhdGUgc3RhdGUgb2JqZWN0Cm15ICRTdGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwoKIyBjcmVhdGUgbmV3IHN0YXRlCm15ICRTdGF0ZUlEID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RTdGF0ZScgLiAkUmFuZG9tSUQsCiAgICBUeXBlSUQgID0+IDIsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTdGF0ZUlELAogICAgIlN0YXRlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBzdGF0ZSIsCik7CgpteSAlU3RhdGVEYXRhID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldCgKICAgIElEID0+ICRTdGF0ZUlELAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVTdGF0ZURhdGEgKSwKICAgICJTdGF0ZUdldCgpIC0gZm9yIHRlc3Rpbmcgc3RhdGUiLAopOwoKIyBjcmVhdGUgcHJpb3JpdHkgb2JqZWN0Cm15ICRQcmlvcml0eU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwoKIyBjcmVhdGUgbmV3IHByaW9yaXR5Cm15ICRQcmlvcml0eUlEID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RQcmlvcml0eScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRQcmlvcml0eUlELAogICAgIlByaW9yaXR5QWRkKCkgLSBjcmVhdGUgdGVzdGluZyBwcmlvcml0eSIsCik7CgpteSAlUHJpb3JpdHlEYXRhID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUdldCgKICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5SUQsCiAgICBVc2VySUQgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVByaW9yaXR5RGF0YSApLAogICAgIlByaW9yaXR5R2V0KCkgLSBmb3IgdGVzdGluZyBwcmlvcml0eSIsCik7CgojIGNyZWF0ZSBkeW5hbWljIGZpZWxkIG9iamVjdApteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKIyBjcmVhdGUgbmV3IGR5bmFtaWMgZmllbGQKbXkgJER5bmFtaWNGaWVsZElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgTmFtZSAgICAgICA9PiAnVGVzdER5bmFtaWNGaWVsZEdJJyAuICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpLAogICAgTGFiZWwgICAgICA9PiAnR0kgVGVzdCBGaWVsZCcsCiAgICBGaWVsZE9yZGVyID0+IDk5OTEsCiAgICBGaWVsZFR5cGUgID0+ICdEYXRlVGltZScsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlICA9PiAwLAogICAgICAgIFllYXJzSW5GdXR1cmUgPT4gMCwKICAgICAgICBZZWFyc0luUGFzdCAgID0+IDAsCiAgICAgICAgWWVhcnNQZXJpb2QgICA9PiAwLAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCm15ICREeW5hbWljRmllbGRJRDIgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICBOYW1lICAgICAgID0+ICdUZXN0RHluYW1pY0ZpZWxkR0kyJyAuICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpLAogICAgTGFiZWwgICAgICA9PiAnR0kgVGVzdCBGaWVsZDInLAogICAgRmllbGRPcmRlciA9PiA5OTkyLAogICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICBPYmplY3RUeXBlID0+ICdBcnRpY2xlJywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICREeW5hbWljRmllbGRJRCwKICAgICJEeW5hbWljRmllbGRBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIGR5bmFtaWMgZmllbGQiLAopOwoKbXkgJER5bmFtaWNGaWVsZERhdGEgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBJRCA9PiAkRHluYW1pY0ZpZWxkSUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgICREeW5hbWljRmllbGRJRDIsCiAgICAiRHluYW1pY0ZpZWxkQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBkeW5hbWljIGZpZWxkIiwKKTsKCm15ICREeW5hbWljRmllbGREYXRhMiA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgIElEID0+ICREeW5hbWljRmllbGRJRDIsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGREYXRhKSwKICAgICJEeW5hbWljRmllbGRHZXQoKSAtIGZvciB0ZXN0aW5nIGR5bmFtaWMgZmllbGQiLAopOwoKIyBjcmVhdGUgd2ViIHNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKJFNlbGYtPklzKAogICAgcmVmICRXZWJzZXJ2aWNlT2JqZWN0LAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgICJDcmVhdGUgd2ViIHNlcnZpY2Ugb2JqZWN0IiwKKTsKCiMgc2V0IHdlYiBzZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkUmFuZG9tSUQ7CgpteSAkV2Vic2VydmljZUlEID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VBZGQoCiAgICBOYW1lICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgfSwKICAgICAgICBQcm92aWRlciA9PiB7CiAgICAgICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlSUQsCiAgICAiQWRkZWQgd2ViIHNlcnZpY2UiLAopOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0ID0gJEhlbHBlci0+R2V0VGVzdEhUVFBIb3N0bmFtZSgpOwoKIyBwcmVwYXJlIHdlYiBzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICcvbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yIFRpY2tldCBDb25uZWN0b3IgdXNpbmcgU09BUCB0cmFuc3BvcnQgYmFja2VuZC4nLAogICAgRGVidWdnZXIgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBQcm92aWRlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAwMDAwMCwKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnVGlja2V0OjpUaWNrZXRDcmVhdGUnLAogICAgICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFJlcXVlc3RlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290cnMub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmNvZGluZyAgPT4gJ1VURi04JywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICAgICAgVGltZW91dCAgID0+IDEyMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEludm9rZXIgPT4gewogICAgICAgICAgICBUaWNrZXRDcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGVzdDo6VGVzdFNpbXBsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCn07CgojIHVwZGF0ZSB3ZWIgc2VydmljZSB3aXRoIHJlYWwgY29uZmlnCm15ICRXZWJzZXJ2aWNlVXBkYXRlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICBJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBOYW1lICAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyAgPT4gJFdlYnNlcnZpY2VDb25maWcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VVcGRhdGUsCiAgICAiVXBkYXRlZCB3ZWIgc2VydmljZSAkV2Vic2VydmljZUlEIC0gJFdlYnNlcnZpY2VOYW1lIiwKKTsKCiMgR2V0IFNlc3Npb25JRAojIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0Cm15ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKJFNlbGYtPklzKAogICAgcmVmICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICJTZXNzaW9uSUQgLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCik7CgojIGNyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAopOwpteSAkUGFzc3dvcmQgPSAkVXNlckxvZ2luOwoKIyBjcmVhdGUgYSBuZXcgdXNlciB3aXRob3V0IHBlcm1pc3Npb25zIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbjIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkUGFzc3dvcmQyICA9ICRVc2VyTG9naW4yOwoKIyBjcmVhdGUgYSBjdXN0b21lciB3aGVyZSBhIHRpY2tldCB3aWxsIHVzZSBhbmQgd2lsbCBoYXZlIHBlcm1pc3Npb25zCm15ICRDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJEN1c3RvbWVyUGFzc3dvcmQgID0gJEN1c3RvbWVyVXNlckxvZ2luOwoKIyBjcmVhdGUgYSBjdXN0b21lciB0aGF0IHdpbGwgbm90IGhhdmUgcGVybWlzc2lvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luMiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJEN1c3RvbWVyUGFzc3dvcmQyICA9ICRDdXN0b21lclVzZXJMb2dpbjI7CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwpteSBAVGVzdHMgICAgICAgID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb21tdW5pY2F0aW9uQ2hhbm5lbCAgICAgICAgICAgID0+ICdFbWFpbCcsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdHJzLmNvbScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJ0R5bmFtaWNGaWVsZFR5cGVBcnRpY2xlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAopOwoKIyBkZWJ1Z2dlciBvYmplY3QKbXkgJERlYnVnZ2VyT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlci0+bmV3KAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW50aWF0ZSBjb3JyZWN0bHknLAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgIG15ICRMb2NhbE9iamVjdCA9ICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgT3BlcmF0aW9uICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICBteSAlQXV0aCA9ICgKICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgKTsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRUZXN0LT57QXV0aH0gKSApIHsKICAgICAgICAlQXV0aCA9ICV7ICRUZXN0LT57QXV0aH0gfTsKICAgIH0KCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQogICAgbXkgJExvY2FsUmVzdWx0ID0gJExvY2FsT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgIHJlZiAkTG9jYWxSZXN1bHQsCiAgICAgICAgJ0hBU0gnLAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYiBzZXJ2aWNlCiAgICBteSAkUmVxdWVzdGVyUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUF1dGgsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAnSEFTSCcsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgJFRlc3QtPntTdWNjZXNzUmVxdWVzdH0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQiLAogICAgKTsKCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIHN1Y2NlZWQKICAgIGlmICggJFRlc3QtPntTdWNjZXNzQ3JlYXRlfSApIHsKCiAgICAgICAgIyBsb2NhbCByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXRJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IFRpY2tldE51bWJlciB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIHJlcXVlc3RlciByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IFRpY2tldElEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBUaWNrZXROdW1iZXIgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LAogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRpY2tldCBvYmplY3QKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIGNoZWNrIHNldmVyYWwgdGlja2V0IGFuZCBhcnRpY2xlIGRhdGEKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e1RpdGxlfSwKICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57VGl0bGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFRpY2tldCB0aXRsZSBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57UXVldWVJRH0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFRpY2tldCBRdWV1ZUlEIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0JvZHl9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57Qm9keX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXJ0aWNsZSBib2R5IE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0Zyb219LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57RnJvbX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXJ0aWNsZSBmcm9tIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVDb21wYXJlRHluYW1pY0ZpZWxkVGVzdDsKICAgICAgICBmb3IgbXkgJEZpZWxkICggQHsgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEZpZWxkLT57TmFtZX0gZXEgJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSApIHsKICAgICAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkVGVzdHtUaWNrZXR9ID0gJEZpZWxkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEZpZWxkLT57TmFtZX0gZXEgJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkQ29tcGFyZUR5bmFtaWNGaWVsZFRlc3R7QXJ0aWNsZX0gPSAkRmllbGQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBteSAlQ29tcGFyZUR5bmFtaWNGaWVsZExvY2FsOwogICAgICAgIExPQ0FMUkVTVUxUVElDS0VUOgogICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgTE9DQUxSRVNVTFRUSUNLRVQgaWYgJEZpZWxkLT57TmFtZX0gbmUgJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfTsKICAgICAgICAgICAgJENvbXBhcmVEeW5hbWljRmllbGRMb2NhbHtUaWNrZXR9ID0gJEZpZWxkOwogICAgICAgIH0KCiAgICAgICAgTE9DQUxSRVNVTFRBUlRJQ0xFOgogICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBMT0NBTFJFU1VMVEFSVElDTEUgaWYgJEZpZWxkLT57TmFtZX0gbmUgJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX07CiAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkTG9jYWx7QXJ0aWNsZX0gPSAkRmllbGQ7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlQ29tcGFyZUR5bmFtaWNGaWVsZExvY2FsLAogICAgICAgICAgICBcJUNvbXBhcmVEeW5hbWljRmllbGRUZXN0LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIFRpY2tldC0+RHluYW1pY0ZpZWxkIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57QXJ0aWNsZX0tPntBdHRhY2htZW50fS0+WzBdLT57RmlsZW5hbWV9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9LT5bMF0tPntGaWxlbmFtZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXR0YWNobWVudCBmaWxlbmFtZSBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e1RpdGxlfSwKICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57VGl0bGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFRpY2tldCB0aXRsZSBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBUaWNrZXQgUXVldWVJRCBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e0FydGljbGV9LT57Qm9keX0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPntCb2R5fSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBBcnRpY2xlIGJvZHkgT2suIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0Zyb219LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57RnJvbX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXJ0aWNsZSBmcm9tIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVDb21wYXJlRHluYW1pY0ZpZWxkUmVxOwogICAgICAgIExPQ0FMUkVTVUxUVElDS0VUOgogICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IExPQ0FMUkVTVUxUVElDS0VUIGlmICRGaWVsZC0+e05hbWV9IG5lICREeW5hbWljRmllbGREYXRhLT57TmFtZX07CiAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkUmVxe1RpY2tldH0gPSAkRmllbGQ7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciB0eXBlIG9mIGtleSBjb250YWluaW5nIGFydGljbGUgZHluYW1pYyBmaWVsZCBkYXRhLCBzaW5jZSBpdCBtaWdodCBiZSBhIGhhc2ggb24gc3lzdGVtcyB3aXRob3V0CiAgICAgICAgIyAgIG11bHRpcGxlIGZpZWxkcyBkZWZpbmVkLiBJbiB0aGlzIGNhc2Ugbm9ybWFsaXplIGl0IHRvIGFuIGFycmF5IG9mIGhhc2hlcyBmb3IgZWFzaWVyIGNvbXBhcmlzb24gbGF0ZXIuCiAgICAgICAgaWYgKCByZWYgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e0FydGljbGV9LT57RHluYW1pY0ZpZWxkfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0R5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgID0gWyAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57QXJ0aWNsZX0tPntEeW5hbWljRmllbGR9IF07CiAgICAgICAgfQoKICAgICAgICBMT0NBTFJFU1VMVEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRGaWVsZCAoIEB7ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBMT0NBTFJFU1VMVEFSVElDTEUgaWYgJEZpZWxkLT57TmFtZX0gbmUgJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX07CiAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkUmVxe0FydGljbGV9ID0gJEZpZWxkOwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICBcJUNvbXBhcmVEeW5hbWljRmllbGRSZXEsCiAgICAgICAgICAgIFwlQ29tcGFyZUR5bmFtaWNGaWVsZFRlc3QsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gcmVxIFRpY2tldC0+RHluYW1pY0ZpZWxkIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgYXR0YWNobWVudAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e0FydGljbGV9LT57QXR0YWNobWVudH0tPntGaWxlbmFtZX0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXR0YWNobWVudH0tPlswXS0+e0ZpbGVuYW1lfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBBdHRhY2htZW50IGZpbGVuYW1lIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGhlIHRpY2tldHMKICAgICAgICBmb3IgbXkgJFRpY2tldElEICgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBBbGxvdyBzb21lIHRpbWUgZm9yIGFsbCBoaXN0b3J5IGVudHJpZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgdGlja2V0IGJlZm9yZSBkZWxldGluZyBpdCwKICAgICAgICAgICAgIyAgIG90aGVyd2lzZSBUaWNrZXREZWxldGUgY291bGQgZmFpbC4KICAgICAgICAgICAgc2xlZXAgMTsKCiAgICAgICAgICAgIG15ICRUaWNrZXREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVGlja2V0RGVsZXRlLAogICAgICAgICAgICAgICAgIlRpY2tldERlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBJRCAkVGlja2V0SUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKIyBkZWxldGUgd2ViIHNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCB3ZWIgc2VydmljZSAkV2Vic2VydmljZUlEIiwKKTsKCiMgZ2V0IERCIG9iamVjdApteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCm15ICRTdWNjZXNzOwoKIyBkZWxldGUgcXVldWVzCmZvciBteSAkUXVldWVEYXRhIChAUXVldWVzKSB7CiAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBxdWV1ZSBXSEVSRSBpZCA9ICRRdWV1ZURhdGEtPntRdWV1ZUlEfSIsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlF1ZXVlIHdpdGggSUQgJFF1ZXVlRGF0YS0+e1F1ZXVlSUR9IGlzIGRlbGV0ZWQhIiwKICAgICk7Cn0KCiMgZGVsZXRlIGdyb3VwCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gZ3JvdXBzIFdIRVJFIGlkID0gJEdyb3VwSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkdyb3VwIHdpdGggSUQgJEdyb3VwSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgdHlwZQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHRpY2tldF90eXBlIFdIRVJFIGlkID0gJFR5cGVJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVHlwZSB3aXRoIElEICRUeXBlSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgc2VydmljZV9jdXN0b21lcl91c2VyIGFuZCBzZXJ2aWNlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTZXJ2aWNlIHVzZXIgcmVmZXJlbmNlZCB0byBzZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiLAopOwoKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCBPUiBzbGFfaWQgPSAkU0xBSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlNlcnZpY2UgU0xBIHJlZmVyZW5jZWQgdG8gc2VydmljZSBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQhIiwKKTsKCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlNlcnZpY2Ugd2l0aCBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQhIiwKKTsKCiMgZGVsZXRlIFNMQQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU0xBIHdpdGggSUQgJFNMQUlEIGlzIGRlbGV0ZWQhIiwKKTsKCiMgZGVsZXRlIHN0YXRlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3N0YXRlIFdIRVJFIGlkID0gJFN0YXRlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlN0YXRlIHdpdGggSUQgJFN0YXRlSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgcHJpb3JpdHkKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfcHJpb3JpdHkgV0hFUkUgaWQgPSAkUHJpb3JpdHlJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiUHJpb3JpdHkgd2l0aCBJRCAkUHJpb3JpdHlJRCBpcyBkZWxldGVkISIsCik7CgojIERlbGV0ZSB0ZXN0IGR5bmFtaWMgZmllbGRzLgokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBkeW5hbWljX2ZpZWxkIFdIRVJFIGlkID0gPyBPUiBpZCA9ID8nLAogICAgQmluZCA9PiBbIFwkRHluYW1pY0ZpZWxkSUQsIFwkRHluYW1pY0ZpZWxkSUQyIF0sCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiRHluYW1pYyBmaWVsZHMgd2l0aCBJRCAkRHluYW1pY0ZpZWxkSUQgYW5kICREeW5hbWljRmllbGRJRDIgYXJlIGRlbGV0ZWQhIiwKKTsKCiMgY2xlYW51cCBjYWNoZQokS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgpOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA3NTNmOTBmOWZmZWU2MTg1ZGQ2ZTYyMGJiMDI4MWRjNTVkZGIwYjQwIC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRTZWFyY2gudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgTUlNRTo6QmFzZTY0OwoKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXI7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRTZWFyY2g7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6U2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKIyBTa2lwIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFNraXBTU0xWZXJpZnkgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBzZWFyY2ggb2xkIHRlc3QgdGlja2V0cwpteSBAT2xkVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJypAZXhhbXBsZS5jb20nLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0FSUkFZJywKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGRlbGV0ZSBvbGQgdGVzdCB0aWNrZXQgdG8gaGF2ZSBhIGNsZWFuIGVudmlyb25tZW50CmZvciBteSAkVGlja2V0SUQgKEBPbGRUaWNrZXRJRHMpIHsKICAgICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cn0KCiMgZ2V0IGEgcmFuZG9tIG51bWJlcgpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKTsKCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIGdldCB0aGUgc3RhcnQgdGltZSBmb3IgdGhlIHRlc3QKbXkgJFN0YXJ0VGltZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKIyBnZXQgdXNlciBvYmplY3QKbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKIyBjcmVhdGUgYSBuZXcgdXNlciBmb3IgY3VycmVudCB0ZXN0Cm15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckFkZCgKICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1Rlc3QnLAogICAgVXNlckxhc3RuYW1lICA9PiAnVXNlcicsCiAgICBVc2VyTG9naW4gICAgID0+ICdUZXN0VXNlcicgLiAkUmFuZG9tSUQsCiAgICBVc2VyUHcgICAgICAgID0+ICdzb21lLXBhc3MnLAogICAgVXNlckVtYWlsICAgICA9PiAndGVzdCcgLiAkUmFuZG9tSUQgLiAnZW1haWxAZXhhbXBsZS5jb20nLAogICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgQ2hhbmdlVXNlcklEICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVXNlcklELAogICAgJ1VzZXIgQWRkICgpJywKKTsKCiMgY3JlYXRlIHR5cGUgb2JqZWN0Cm15ICRUeXBlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCiMgY3JlYXRlIG5ldyB0eXBlCm15ICRUeXBlSUQgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RUeXBlJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFR5cGVJRCwKICAgICJUeXBlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyB0eXBlIiwKKTsKCm15ICVUeXBlRGF0YSA9ICRUeXBlT2JqZWN0LT5UeXBlR2V0KAogICAgSUQgPT4gJFR5cGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVHlwZURhdGEgKSwKICAgICJRdWV1ZUdldCgpIC0gZm9yIHRlc3RpbmcgdHlwZSIsCik7CgojIGdldCBzZXJ2aWNlIG9iamVjdApteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgojIGNyZWF0ZSBuZXcgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlELAogICAgIlNlcnZpY2VBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHNlcnZpY2UiLAopOwoKbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVTZXJ2aWNlRGF0YSApLAogICAgIlNlcnZpY2VHZXQoKSAtIGZvciB0ZXN0aW5nIHNlcnZpY2UiLAopOwoKIyBjcmVhdGUgZHluYW1pYyBmaWVsZCBwcm9wZXJ0aWVzCm15IEBEeW5hbWljRmllbGRQcm9wZXJ0aWVzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gIkRGVDEkUmFuZG9tSUQiLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MSwKICAgICAgICBGaWVsZFR5cGUgID0+ICdUZXh0JywKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICJERlQyJFJhbmRvbUlEIiwKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTIsCiAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBEZWZhdWx0VmFsdWUgICA9PiAnRGVmYXVsdCcsCiAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgICAgIHRpY2tldDFfZmllbGQyID0+ICd0aWNrZXQxX2ZpZWxkMicsCiAgICAgICAgICAgICAgICB0aWNrZXQyX2ZpZWxkMiA9PiAndGlja2V0Ml9maWVsZDInLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gIkRGVDMkUmFuZG9tSUQiLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MywKICAgICAgICBGaWVsZFR5cGUgID0+ICdEYXRlVGltZScsICAgICAgICAjIG1hbmRhdG9yeSwgc2VsZWN0cyB0aGUgREYgYmFja2VuZCB0byB1c2UgZm9yIHRoaXMgZmllbGQKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICJERlQ0JFJhbmRvbUlEIiwKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTQsCiAgICAgICAgRmllbGRUeXBlICA9PiAnRGF0ZScsICAgICAgICAgICAgIyBtYW5kYXRvcnksIHNlbGVjdHMgdGhlIERGIGJhY2tlbmQgdG8gdXNlIGZvciB0aGlzIGZpZWxkCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnRGVmYXVsdCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAiREZUNSRSYW5kb21JRCIsCiAgICAgICAgRmllbGRPcmRlciA9PiA5OTk1LAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ0NoZWNrYm94JywgICAgICAgICMgbWFuZGF0b3J5LCBzZWxlY3RzIHRoZSBERiBiYWNrZW5kIHRvIHVzZSBmb3IgdGhpcyBmaWVsZAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJ0RlZmF1bHQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gIkRGVDYkUmFuZG9tSUQiLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5NiwKICAgICAgICBGaWVsZFR5cGUgID0+ICdNdWx0aXNlbGVjdCcsICAgICAjIG1hbmRhdG9yeSwgc2VsZWN0cyB0aGUgREYgYmFja2VuZCB0byB1c2UgZm9yIHRoaXMgZmllbGQKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgPT4gWyAndGlja2V0Ml9maWVsZDUnLCAndGlja2V0NF9maWVsZDUnIF0sCiAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgICAgIHRpY2tldDFfZmllbGQ1ID0+ICd0aWNrZXQxX2ZpZWxkNTEnLAogICAgICAgICAgICAgICAgdGlja2V0Ml9maWVsZDUgPT4gJ3RpY2tldDJfZmllbGQ1MicsCiAgICAgICAgICAgICAgICB0aWNrZXQzX2ZpZWxkNSA9PiAndGlja2V0Ml9maWVsZDUzJywKICAgICAgICAgICAgICAgIHRpY2tldDRfZmllbGQ1ID0+ICd0aWNrZXQyX2ZpZWxkNTQnLAogICAgICAgICAgICAgICAgdGlja2V0NV9maWVsZDUgPT4gJ3RpY2tldDJfZmllbGQ1NScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0KKTsKCiMgY3JlYXRlIGR5bmFtaWMgZmllbGRzCm15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15IEBUZXN0RmllbGRDb25maWc7Cgpmb3IgbXkgJER5bmFtaWNGaWVsZFByb3BlcnR5IChARHluYW1pY0ZpZWxkUHJvcGVydGllcykgewogICAgbXkgJEZpZWxkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgJXskRHluYW1pY0ZpZWxkUHJvcGVydHl9LAogICAgICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgUmVvcmRlciAgICA9PiAwLAogICAgKTsKCiAgICBwdXNoIEBUZXN0RmllbGRDb25maWcsICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICk7Cn0KCiMgY3JlYXRlIDMgdGlja2V0cwoKIyB0aWNrZXQgaWQgY29udGFpbmVyCm15IEBUaWNrZXRJRHM7CgojIGNyZWF0ZSB0aWNrZXQgMQpteSAkVGlja2V0SUQxID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgT25lIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJPbmVAZXhhbXBsZS5jb20nLAogICAgU2VydmljZSAgICAgID0+ICdUZXN0U2VydmljZScgLiAkUmFuZG9tSUQsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQxLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMSIsCik7CgpteSAkVGlja2V0TnVtYmVyMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE51bWJlckxvb2t1cCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXROdW1iZXIxLAogICAgIlRpY2tldE51bWJlckxvb2t1cCgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMSIsCik7CgojIHVwZGF0ZSBlc2NhbGF0aW9uIHRpbWVzIGRpcmVjdGx5IGluIHRoZSBEQgpteSAkRXNjYWxhdGlvblRpbWUgPSAkU3RhcnRUaW1lLT5Ub0Vwb2NoKCkgKyAxMjA7CnJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgU1FMID0+ICcKICAgICAgICBVUERBVEUgdGlja2V0CiAgICAgICAgU0VUIGVzY2FsYXRpb25fdGltZSA9ID8sIGVzY2FsYXRpb25fcmVzcG9uc2VfdGltZSA9ID8sIGVzY2FsYXRpb25fdXBkYXRlX3RpbWUgPSA/LAogICAgICAgICAgICBlc2NhbGF0aW9uX3NvbHV0aW9uX3RpbWUgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/CiAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgIEJpbmQgPT4gWwogICAgICAgIFwkRXNjYWxhdGlvblRpbWUsCiAgICAgICAgXCRFc2NhbGF0aW9uVGltZSwKICAgICAgICBcJEVzY2FsYXRpb25UaW1lLAogICAgICAgIFwkRXNjYWxhdGlvblRpbWUsCiAgICAgICAgXCcxJywKICAgICAgICBcJFRpY2tldElEMSwKICAgIF0sCik7CgojIGNyZWF0ZSBiYWNrZW5kIG9iamVjdCBhbmQgZGVsZWdhdGVzCm15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwokU2VsZi0+SXMoCiAgICByZWYgJEJhY2tlbmRPYmplY3QsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiAgICAnQmFja2VuZCBvYmplY3Qgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JywKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzBdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ3RpY2tldDFfZmllbGQxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbMV0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAndGlja2V0MV9maWVsZDInLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1syXSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICcyMDAxLTAxLTAxIDAxOjAxOjAxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbM10sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnMjAwMS0wMS0wMSAwMDowMDowMCcsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzRdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzAnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1s1XSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+IFsgJ3RpY2tldDFfZmllbGQ1MScsICd0aWNrZXQxX2ZpZWxkNTInLCAndGlja2V0MV9maWVsZDUzJyBdLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aG91dCBkeW5hbWljIGZpZWxkcwpteSAlVGlja2V0RW50cnlPbmUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5T25lICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IE9uZSBJRCAkVGlja2V0SUQxIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeU9uZSApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeU9uZXskS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlPbmV7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5T25leyRLZXl9OwogICAgfQp9CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aCBkeW5hbWljIGZpZWxkcwpteSAlVGlja2V0RW50cnlPbmVERiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMSwKICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlPbmVERiApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgd2l0aCBERiBmb3IgTG9jYWwgVGlja2V0R2V0IE9uZSBJRCAkVGlja2V0SUQxIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeU9uZURGICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5T25lREZ7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5T25lREZ7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5T25lREZ7JEtleX07CiAgICB9Cn0KCiMgYWRkIHRpY2tldCBpZApwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDE7CgojIGNyZWF0ZSB0aWNrZXQgMgpteSAkVGlja2V0SUQyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJUd28nIC4gJFJhbmRvbUlEIC4gJ0BleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQyLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBUd28gSUQgJFRpY2tldElEMiIsCik7CgpteSAkVGlja2V0TnVtYmVyMiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE51bWJlckxvb2t1cCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXROdW1iZXIyLAogICAgIlRpY2tldE51bWJlckxvb2t1cCgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMiIsCik7CgojIHNldCBkeW5hbWljIGZpZWxkIHZhbHVlcwokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1swXSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICd0aWNrZXQyX2ZpZWxkMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzFdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ3RpY2tldDJfZmllbGQyJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbMl0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnMjAxMS0xMS0xMSAxMToxMToxMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzNdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzIwMTEtMTEtMTEgMDA6MDA6MDAnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1s0XSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICcxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbNV0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiBbCiAgICAgICAgJ3RpY2tldDFfZmllbGQ1JywKICAgICAgICAndGlja2V0Ml9maWVsZDUnLAogICAgICAgICd0aWNrZXQ0X2ZpZWxkNScsCiAgICBdLAogICAgVXNlcklEID0+IDEsCik7CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aG91dCBERgpteSAlVGlja2V0RW50cnlUd28gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5VHdvICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IFR3byBJRCAkVGlja2V0SUQyIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeVR3byApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVR3b3skS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlUd297JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5VHdveyRLZXl9OwogICAgfQp9CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aCBERgpteSAlVGlja2V0RW50cnlUd29ERiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMiwKICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlUd29ERiApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgZm9yIExvY2FsIFRpY2tldEdldCBUd28gSUQgJFRpY2tldElEMiIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlUd29ERiApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQyOwoKIyBjcmVhdGUgdGlja2V0IDMKbXkgJFRpY2tldElEMyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRocmVlIFRpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMSB2ZXJ5IGxvdycsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyVGhyZWVAZXhhbXBsZS5jb20nLAogICAgVHlwZSAgICAgICAgID0+ICdUZXN0VHlwZScgLiAkUmFuZG9tSUQsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQzLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBUaHJlZSBJRCAkVGlja2V0SUQzIiwKKTsKCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKbXkgJVRpY2tldEVudHJ5VGhyZWUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDMsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5VGhyZWUgKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIGZvciBMb2NhbCBUaWNrZXRHZXQgVGhyZWUgSUQgJFRpY2tldElEMyIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlUaHJlZSApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVRocmVleyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVRocmVleyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeVRocmVleyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQzOwoKIyBjcmVhdGUgdGlja2V0IDQKbXkgJFRpY2tldElENCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IEZvdXIgVGl0bGUgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgIFF1ZXVlICAgICAgICA9PiAnSnVuaycsCiAgICBMb2NrICAgICAgICAgPT4gJ2xvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzY1NDMyMScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyRm91ckBleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQ0LAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBGb3VyIElEICRUaWNrZXRJRDQiLAopOwoKbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7Cm15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ0ludGVybmFsJyApOwoKIyBmaXJzdCBhcnRpY2xlCm15ICRBcnRpY2xlSUQ0MSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRDQsCiAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICBUbyAgICAgICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQSA8Y3VzdG9tZXItYUBleGFtcGxlLmNvbT4nLAogICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFJlcGx5VG8gICAgICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnZmlyc3QgYXJ0aWNsZScsCiAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQSB0ZXh0IGZvciB0aGUgYm9keSwgVGl0bGUgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgIENvbnRlbnRUeXBlICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdPd25lclVwZGF0ZScsCiAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnZmlyc3QgYXJ0aWNsZScsCiAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAxLAogICAgTm9BZ2VudE5vdGlmeSAgICAgICAgPT4gMSwKKTsKCiRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VhcmNoSW5kZXhCdWlsZCgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQ0LAogICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQ0MSwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBzZWNvbmQgYXJ0aWNsZQpteSAkQXJ0aWNsZUlENDIgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQ0LAogICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnQW5vdCBSZWFsIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgIENjICAgICAgICAgICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBSZXBseVRvICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ3NlY29uZCBhcnRpY2xlJywKICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBIHRleHQgZm9yIHRoZSBib2R5LCBub3QgdG9vIGxvbmcnLAogICAgQ29udGVudFR5cGUgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ093bmVyVXBkYXRlJywKICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdzZWNvbmQgYXJ0aWNsZScsCiAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAxLAogICAgTm9BZ2VudE5vdGlmeSAgICAgICAgPT4gMSwKKTsKCiRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VhcmNoSW5kZXhCdWlsZCgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQ0LAogICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQ0MiwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBIZWxwZXIgbWV0aG9kIHRvIHJldHJpZXZlIGFydGljbGUgY29udGVudCBmb3Igc3VwcGxpZWQgbGlzdCBvZiBhcnRpY2xlcy4KIwojICAgICRBcnRpY2xlQ29udGVudEdldC0+KAojICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAxMjMsICAgICAgICAgICAjIChyZXF1aXJlZCkKIyAgICAgICAgQXJ0aWNsZXMgICAgICAgICAgICAgPT4gXEBBcnRpY2xlcywgICAgIyAocmVxdWlyZWQpCiMgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgID0+IDEsICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBJbmNsdWRlIGR5bmFtaWMgZmllbGQgdmFsdWVzCiMgICAgKTsKIwpteSAkQXJ0aWNsZUNvbnRlbnRHZXQgPSBzdWIgewogICAgbXkgKCVQYXJhbSkgPSBAXzsKCiAgICBpZiAoCiAgICAgICAgISRQYXJhbXtUaWNrZXRJRH0KICAgICAgICAmJiAhSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17QXJ0aWNsZXN9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15IEBBcnRpY2xlQ29udGVudHM7CiAgICBmb3IgbXkgJEFydGljbGUgKCBAeyAkUGFyYW17QXJ0aWNsZXN9IH0gKSB7CiAgICAgICAgbXkgJUFydGljbGVDb250ZW50ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXJ0aWNsZUNvbnRlbnRzLCBcJUFydGljbGVDb250ZW50OwogICAgfQoKICAgIHJldHVybiBAQXJ0aWNsZUNvbnRlbnRzOwp9OwoKIyBHZXQgYXJ0aWNsZSBjb250ZW50cyAobm8gYXR0YWNobWVudHMpLgpteSBAQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAopOwpteSBAQXJ0aWNsZVdpdGhvdXRBdHRhY2htZW50cyA9ICRBcnRpY2xlQ29udGVudEdldC0+KAogICAgQXJ0aWNsZXMgPT4gXEBBcnRpY2xlcywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCik7CgojIEFkZCBhdHRhY2htZW50cyB0byBhcnRpY2xlLgpmb3IgbXkgJEZpbGUgKHF3KHhscyB0eHQgZG9jIHBuZyBwZGYpKSB7CiAgICBteSAkTG9jYXRpb24gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKQogICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL1N0ZEF0dGFjaG1lbnQvU3RkQXR0YWNobWVudC1UZXN0MS4kRmlsZSI7CgogICAgbXkgJENvbnRlbnRSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlUmVhZCgKICAgICAgICBMb2NhdGlvbiA9PiAkTG9jYXRpb24sCiAgICAgICAgTW9kZSAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgIFR5cGUgICAgID0+ICdMb2NhbCcsCiAgICApOwoKICAgIG15ICRBcnRpY2xlV3JpdGVBdHRhY2htZW50ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlV3JpdGVBdHRhY2htZW50KAogICAgICAgIENvbnRlbnQgICAgID0+ICR7JENvbnRlbnRSZWZ9LAogICAgICAgIEZpbGVuYW1lICAgID0+ICJTdGRBdHRhY2htZW50LVRlc3QxLiRGaWxlIiwKICAgICAgICBDb250ZW50VHlwZSA9PiAkRmlsZSwKICAgICAgICBBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZUlENDIsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7Cn0KCiMgR2V0IGFydGljbGUgY29udGVudHMgKGF0dGFjaG1lbnRzKS4KbXkgQEFydGljbGVCb3ggPSAkQXJ0aWNsZUNvbnRlbnRHZXQtPigKICAgIEFydGljbGVzID0+IFxAQXJ0aWNsZXMsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAopOwoKIyBIZWxwZXIgbWV0aG9kIHRvIHJldHJpZXZlIGFydGljbGUgYXR0YWNobWVudCBjb250ZW50IGZvciBzdXBwbGllZCBsaXN0IG9mIGFydGljbGVzLgojCiMgICAgJEFydGljbGVBdHRhY2htZW50Q29udGVudEdldC0+KAojICAgICAgICBBcnRpY2xlcyAgPT4gXEBBcnRpY2xlcywgICAgIyAocmVxdWlyZWQpCiMgICAgICAgIE5vQ29udGVudCA9PiAxLCAgICAgICAgICAgICAjIChvcHRpb25hbCkgT21pdCBhY3R1YWwgYXR0YWNobWVudCBjb250ZW50LCByZXR1cm4gb25seSBtZXRhIGRhdGEKIyAgICAgICAgSFRNTEJvZHkgID0+IDEsICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBJbmNsdWRlIEhUTUwgYm9keSBhdHRhY2htZW50IGNvbnRlbnQKIyAgICApOwojCm15ICRBcnRpY2xlQXR0YWNobWVudENvbnRlbnRHZXQgPSBzdWIgewogICAgbXkgKCVQYXJhbSkgPSBAXzsKCiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtBcnRpY2xlc30gKSApIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgQEFydGljbGVzID0gQHsgJFBhcmFte0FydGljbGVzfSB9OwoKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewoKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRBcnRpY2xlfSApIHsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkQXJ0aWNsZS0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgJEFydGljbGUtPnskS2V5fSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4LgogICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIEV4Y2x1ZGVQbGFpblRleHQgPT4gMSwKICAgICAgICAgICAgRXhjbHVkZUhUTUxCb2R5ICA9PiAkUGFyYW17SFRNTEJvZHl9ID8gMCA6IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdG1JbmRleCApOwoKICAgICAgICBteSBAQXR0YWNobWVudHM7CiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAlQXRtSW5kZXggKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJEZpbGVJRDsKICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkRmlsZUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdHRhY2htZW50ICk7CgogICAgICAgICAgICAkQXR0YWNobWVudHtGaWxlSUR9ID0gJEZpbGVJRDsKCiAgICAgICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NAogICAgICAgICAgICAkQXR0YWNobWVudHtDb250ZW50fSAgICAgICAgICAgID0gJFBhcmFte05vQ29udGVudH0gPyAnJyA6IGVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50e0NvbnRlbnR9ICk7CiAgICAgICAgICAgICRBdHRhY2htZW50e0NvbnRlbnRJRH0gICAgICAgICAgPSAnJzsKICAgICAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudEFsdGVybmF0aXZlfSA9ICcnOwogICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgeyVBdHRhY2htZW50fTsKICAgICAgICB9CgogICAgICAgICMgc2V0IEF0dGFjaG1lbnRzIGRhdGEKICAgICAgICAkQXJ0aWNsZS0+e0F0dGFjaG1lbnR9ID0gXEBBdHRhY2htZW50czsKICAgIH0KfTsKCiMgSW5zZXJ0IGF0dGFjaG1lbnQgY29udGVudC4KJEFydGljbGVBdHRhY2htZW50Q29udGVudEdldC0+KAogICAgQXJ0aWNsZXMgPT4gXEBBcnRpY2xlQm94LAopOwoKIyBnZXQgdGhlIFRpY2tldCBlbnRyeQpteSAlVGlja2V0RW50cnlGb3VyID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQ0LAogICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAopOwoKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXRFbnRyeUZvdXIgKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIGZvciBMb2NhbCBUaWNrZXRHZXQgRm91ciBJRCAkVGlja2V0SUQ0IgopOwoKZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVRpY2tldEVudHJ5Rm91ciApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeUZvdXJ7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5Rm91cnskS2V5fSA9ICcnOwogICAgfQogICAgaWYgKCAkS2V5IGVxICdBZ2UnICkgewogICAgICAgIGRlbGV0ZSAkVGlja2V0RW50cnlGb3VyeyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQ0OwoKIyBzZXQgd2ViIHNlcnZpY2UgbmFtZQpteSAkV2Vic2VydmljZU5hbWUgPSAnLVRlc3QtJyAuICRSYW5kb21JRDsKCiMgY3JlYXRlIHdlYiBzZXJ2aWNlIG9iamVjdApteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICByZWYgJFdlYnNlcnZpY2VPYmplY3QsCiAgICAiQ3JlYXRlIHdlYiBzZXJ2aWNlIG9iamVjdCIKKTsKCm15ICRXZWJzZXJ2aWNlSUQgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUFkZCgKICAgIE5hbWUgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgPT4gewogICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICB9LAogICAgICAgIFByb3ZpZGVyID0+IHsKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VJRCwKICAgICdBZGRlZCB3ZWIgc2VydmljZScKKTsKCiMgZ2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcwpteSAkSG9zdCA9ICRIZWxwZXItPkdldFRlc3RIVFRQSG9zdG5hbWUoKTsKCiMgcHJlcGFyZSB3ZWIgc2VydmljZSBjb25maWcKbXkgJFJlbW90ZVN5c3RlbSA9CiAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0h0dHBUeXBlJykKICAgIC4gJzovLycKICAgIC4gJEhvc3QKICAgIC4gJy8nCiAgICAuICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKQogICAgLiAnL25waC1nZW5lcmljaW50ZXJmYWNlLnBsL1dlYnNlcnZpY2VJRC8nCiAgICAuICRXZWJzZXJ2aWNlSUQ7CgpteSAkV2Vic2VydmljZUNvbmZpZyA9IHsKCiAgICAjICAgIE5hbWUgPT4gJycsCiAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICdUZXN0IGZvciBUaWNrZXQgQ29ubmVjdG9yIHVzaW5nIFNPQVAgdHJhbnNwb3J0IGJhY2tlbmQuJywKICAgIERlYnVnZ2VyID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgUHJvdmlkZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwMDAwMDAsCiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdHJzLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gewogICAgICAgICAgICBUaWNrZXRTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0OjpUaWNrZXRTZWFyY2gnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Nlc3Npb246OlNlc3Npb25DcmVhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgUmVxdWVzdGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3Rycy5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuY29kaW5nICA9PiAnVVRGLTgnLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgICAgICBUaW1lb3V0ICAgPT4gMTIwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIFRpY2tldFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYiBzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZVVwZGF0ZSwKICAgICJVcGRhdGVkIHdlYiBzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiCik7CgojIEdldCBTZXNzaW9uSUQKIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdApteSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiRTZWxmLT5JcygKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICByZWYgJFJlcXVlc3RlclNlc3Npb25PYmplY3QsCiAgICAnU2Vzc2lvbklEIC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QnCik7CgojIGNyZWF0ZSBhIG5ldyB1c2VyIGZvciBjdXJyZW50IHRlc3QKbXkgJFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAopOwpteSAkUGFzc3dvcmQgPSAkVXNlckxvZ2luOwoKIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2ViIHNlcnZpY2UKbXkgJFJlcXVlc3RlclNlc3Npb25SZXN1bHQgPSAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdC0+UnVuKAogICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBJbnZva2VyICAgICAgPT4gJ1Nlc3Npb25DcmVhdGUnLAogICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgfSwKKTsKCm15ICROZXdTZXNzaW9uSUQgPSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdC0+e0RhdGF9LT57U2Vzc2lvbklEfTsKCm15ICRUZXN0Q291bnRlciA9IDE7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldE51bWJlcjEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+IFsKICAgICAgICAgICAgICAgICRUaWNrZXROdW1iZXIxLAogICAgICAgICAgICAgICAgJFRpY2tldE51bWJlcjIsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSA9PiBbCiAgICAgICAgICAgICAgICAnVGlja2V0IE9uZSBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBRdWV1ZXMgPT4gJ1JhdycKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFF1ZXVlcyA9PiAnUmF3JywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgTG9ja3MgPT4gJ3VubG9jaycsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBTdGF0ZXMgPT4gJ25ldycsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgUHJpb3JpdGllcyA9PiAnMyBub3JtYWwnLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBDdXN0b21lcklEID0+ICcxMjM0NjUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBTb3J0QnkgICAgID0+ICdUaWNrZXQnLCAgICAgICAgICAgICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgICAgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBRdWV1ZXMgICAgID0+IFsnSnVuayddLAogICAgICAgICAgICBDdXN0b21lcklEID0+ICc2NTQzMjEnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQ0XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUeXBlcyA9PiBbICdUZXN0VHlwZScgLiAkUmFuZG9tSUQgXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEM10sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQzLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgU3RhdGVzID0+IFsnbmV3J10sCiAgICAgICAgICAgIFRpdGxlICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBTdGF0ZXMgID0+IFsnbmV3J10sCiAgICAgICAgICAgIFRpdGxlICAgPT4gJyonIC4gJFJhbmRvbUlELAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAgICAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgICAgICA9PiAnKiDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICBDdXN0b21lcklEID0+ICc2NTQzMjEnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQ0XSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBQcmlvcml0aWVzID0+IFsnMSB2ZXJ5IGxvdyddLAogICAgICAgICAgICBDdXN0b21lcklEID0+ICcxMjM0NjUnIC4gJFJhbmRvbUlELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQzXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDMsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKEhhc2gpIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiREZUMSRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ3RpY2tldDJfZmllbGQxJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IChIYXNoKSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgIExpa2UgPT4gJypfZmllbGQxJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU29ydEJ5ID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKEFycmF5KSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ3RpY2tldDJfZmllbGQxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoQXJyYXkpIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBMaWtlID0+ICcqX2ZpZWxkMScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBTb3J0QnkgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoT2xkIEFQSSkgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDEkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAndGlja2V0Ml9maWVsZDEnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKE9sZCBBUEkpIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQxJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBMaWtlID0+ICcqX2ZpZWxkMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNvcnRCeSA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IERGIERhdGUgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDQkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEdyZWF0ZXJUaGFuRXF1YWxzID0+ICcyMDEwLTAxLTAxJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU29ydEJ5ID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgTGFzdENoYW5nZVRpbWVOZXdlckRhdGUgKyAgQ3JlYXRlVGltZU5ld2VyRGF0ZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICRTdGFydFRpbWUtPlRvU3RyaW5nKCksCiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgICAgID0+ICRTdGFydFRpbWUtPlRvU3RyaW5nKCksCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElENCwgJFRpY2tldElEMywgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQ0LCAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgQ3JlYXRlVGltZU5ld2VyRGF0ZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBFcG9jaCA9PiAkU3RhcnRUaW1lLT5Ub0Vwb2NoKCkgKyAxMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApLT5Ub1N0cmluZygpLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IExpbWl0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4gJFN0YXJ0VGltZS0+VG9TdHJpbmcoKSwKICAgICAgICAgICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSAgICAgPT4gJFN0YXJ0VGltZS0+VG9TdHJpbmcoKSwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgICAgIExpbWl0ICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElENF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IEVzY2FsYXRpb25UaW1lICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0RXNjYWxhdGlvblRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgRXNjYWxhdGlvblJlc3BvbnNlVGltZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldEVzY2FsYXRpb25SZXNwb25zZVRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgRXNjYWxhdGlvblVwZGF0ZVRpbWUgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRFc2NhbGF0aW9uVXBkYXRlVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBFc2NhbGF0aW9uU29sdXRpb25UaW1lICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0RXNjYWxhdGlvblNvbHV0aW9uVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBDb250ZW50U2VhcmNoIFBhcmFtZXRlciIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgTUlNRUJhc2VfQm9keSAgICA9PiAndGV4dCBib2R5IGxvbmcnLAogICAgICAgICAgICBNSU1FQmFzZV9TdWJqZWN0ID0+ICd0ZXh0IGJvZHkgbG9uZycsCiAgICAgICAgICAgIENvbnRlbnRTZWFyY2ggICAgPT4gJ09SJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElENF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBPcGVyYXRvciAnRW1wdHknIERGVDEgLSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IE9wZXJhdG9yICdFbXB0eScgREZUMiAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gIkRGVDIkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgT3BlcmF0b3IgJ0VtcHR5JyBERlQzIC0gREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gWyAkVGlja2V0SUQxLCAkVGlja2V0SUQyLCAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAiREZUMyRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBPcGVyYXRvciAnRW1wdHknIERGVDQgLSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQ0JFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IE9wZXJhdG9yICdFbXB0eScgREZUIEFMTCAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiREZUMiRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIkRGVDMkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQ0JFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKE9sZCBBUEkpIE9wZXJhdG9yICdFbXB0eScgREZUMSAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQxJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoT2xkIEFQSSkgT3BlcmF0b3IgJ0VtcHR5JyBERlQyIC0gREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDIkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IChPbGQgQVBJKSBPcGVyYXRvciAnRW1wdHknIERGVDMgLSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgICAgICAgPT4gWyAkVGlja2V0SUQxLCAkVGlja2V0SUQyLCAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgICJEeW5hbWljRmllbGRfREZUMyRSYW5kb21JRCIgPT4gewogICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKE9sZCBBUEkpIE9wZXJhdG9yICdFbXB0eScgREZUNCAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQ0JFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoT2xkIEFQSSkgT3BlcmF0b3IgJ0VtcHR5JyBERlQgQUxMIC0gREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDEkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJEeW5hbWljRmllbGRfREZUMiRSYW5kb21JRCIgPT4gewogICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQzJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDQkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAopOwoKIyBBZGQgYSB3cm9uZyB2YWx1ZSB0ZXN0IGZvciBlYWNoIHBvc3NpYmxlIHBhcmFtZXRlciBvbiBkaXJlY3Qgc2VhcmNoCgpmb3IgbXkgJEl0ZW0gKAogICAgcXcoCiAgICBUaWNrZXROdW1iZXIgVGl0bGUgTUlNRUJhc2VfRnJvbSBNSU1FQmFzZV9UbyBNSU1FQmFzZV9DYyBNSU1FQmFzZV9TdWJqZWN0CiAgICBNSU1FQmFzZV9Cb2R5IEN1c3RvbWVySUQgQ3VzdG9tZXJVc2VyTG9naW4gU3RhdGVUeXBlIEZ1bGx0ZXh0CiAgICApCiAgICApCnsKICAgIG15ICRGYWlsVGVzdCA9IHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAkSXRlbSIsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgICRJdGVtID0+ICdOb3RBUmVhbCcgLiAkSXRlbSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH07CgogICAgIyBwdXNoIHRlc3QKICAgIHB1c2ggQFRlc3RzLCAkRmFpbFRlc3Q7Cn0KCiMgQXJyYXlzIGFzIHN0cmluZ3MKZm9yIG15ICRJdGVtICgKICAgIHF3KFN0YXRlSURzIFN0YXRlVHlwZUlEcyBRdWV1ZUlEcyBQcmlvcml0eUlEcyBPd25lcklEcwogICAgQ3JlYXRlZFF1ZXVlSURzIENyZWF0ZWRVc2VySURzIFdhdGNoVXNlcklEcyBSZXNwb25zaWJsZUlEcwogICAgVHlwZUlEcyBTZXJ2aWNlSURzIFNMQUlEcyBMb2NrSURzIFF1ZXVlcyBUeXBlcyBTdGF0ZXMKICAgIFByaW9yaXRpZXMgU2VydmljZXMgU0xBcyBMb2NrcyBDcmVhdGVkVHlwZXMgQ3JlYXRlZFVzZXJJRHMKICAgIENyZWF0ZWRUeXBlcyBDcmVhdGVkVHlwZUlEcyBDcmVhdGVkUHJpb3JpdGllcwogICAgQ3JlYXRlZFByaW9yaXR5SURzIENyZWF0ZWRTdGF0ZXMgQ3JlYXRlZFN0YXRlSURzCiAgICBDcmVhdGVkUXVldWVzIENyZWF0ZWRRdWV1ZUlEcwogICAgKQogICAgKQp7CiAgICBteSAkRmFpbFRlc3QgPSB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgJEl0ZW0iLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAkSXRlbSA9PiAnTm90QVJlYWwnIC4gJEl0ZW0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9OwoKICAgICMgcHVzaCB0ZXN0CiAgICBwdXNoIEBUZXN0cywgJEZhaWxUZXN0Owp9CgojIEFycmF5cwpmb3IgbXkgJEl0ZW0gKAogICAgcXcoU3RhdGVJRHMgU3RhdGVUeXBlSURzIFF1ZXVlSURzIFByaW9yaXR5SURzIE93bmVySURzCiAgICBDcmVhdGVkUXVldWVJRHMgQ3JlYXRlZFVzZXJJRHMgV2F0Y2hVc2VySURzIFJlc3BvbnNpYmxlSURzCiAgICBUeXBlSURzIFNlcnZpY2VJRHMgU0xBSURzIExvY2tJRHMgUXVldWVzIFR5cGVzIFN0YXRlcwogICAgUHJpb3JpdGllcyBTZXJ2aWNlcyBTTEFzIExvY2tzIENyZWF0ZWRUeXBlcyBDcmVhdGVkVXNlcklEcwogICAgQ3JlYXRlZFR5cGVzIENyZWF0ZWRUeXBlSURzIENyZWF0ZWRQcmlvcml0aWVzCiAgICBDcmVhdGVkUHJpb3JpdHlJRHMgQ3JlYXRlZFN0YXRlcyBDcmVhdGVkU3RhdGVJRHMKICAgIENyZWF0ZWRRdWV1ZXMgQ3JlYXRlZFF1ZXVlSURzCiAgICApCiAgICApCnsKICAgIG15ICRGYWlsVGVzdCA9IHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAkSXRlbSIsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgICRJdGVtID0+IFsKICAgICAgICAgICAgICAgICdOb3RBUmVhbCcgLiAkSXRlbSAuICdPbmUnLAogICAgICAgICAgICAgICAgJ05vdEFSZWFsJyAuICRJdGVtIC4gJ1R3bycsCiAgICAgICAgICAgICAgICAnTm90QVJlYWwnIC4gJEl0ZW0gLiAnVGhyZWUnLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfTsKCiAgICAjIHB1c2ggdGVzdAogICAgcHVzaCBAVGVzdHMsICRGYWlsVGVzdDsKfQoKIyBkZWJ1Z2dlciBvYmplY3QKbXkgJERlYnVnZ2VyT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlci0+bmV3KAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW50aWF0ZSBjb3JyZWN0bHknCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICMgY3JlYXRlIGxvY2FsIG9iamVjdAogICAgbXkgJExvY2FsT2JqZWN0ID0gIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OiRUZXN0LT57T3BlcmF0aW9ufSItPm5ldygKICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgV2Vic2VydmljZUlEICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLAogICAgICAgIHJlZiAkTG9jYWxPYmplY3QsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgbG9jYWwgb2JqZWN0IiwKICAgICk7CgogICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2ViIHNlcnZpY2UKICAgIG15ICRMb2NhbFJlc3VsdCA9ICRMb2NhbE9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICAgICAgICAgIFRpY2tldElEICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgICdIQVNIJywKICAgICAgICByZWYgJExvY2FsUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIKICAgICk7CgogICAgIyBjcmVhdGUgcmVxdWVzdGVyIG9iamVjdAogICAgbXkgJFJlcXVlc3Rlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICAgICByZWYgJFJlcXVlc3Rlck9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IgogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQogICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkTmV3U2Vzc2lvbklELAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gWyAkVGlja2V0SUQxLCAkVGlja2V0SUQyLCAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgICAgIH0KICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICAnSEFTSCcsCiAgICAgICAgcmVmICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgJFRlc3QtPntTdWNjZXNzUmVxdWVzdH0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQiLAogICAgKTsKCiAgICAjIHJlbW92ZSBFcnJvck1lc3NhZ2UgcGFyYW1ldGVyIGZyb20gZGlyZWN0IGNhbGwKICAgICMgcmVzdWx0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBTT0FQIGNhbGwgcmVzdWx0CiAgICBpZiAoICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gKSB7CiAgICAgICAgZGVsZXRlICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX07CiAgICB9CgogICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJldHVyblJlbW90ZURhdGF9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHN1Y2Nlc3Mgc3RhdHVzIChuZWVkcyBjb25maWd1cmVkIGFuZCBydW5uaW5nIHdlYnNlcnZlcikiCiAgICApOwoKICAgIGlmICggJFRlc3QtPntFeHBlY3RlZFJldHVybkxvY2FsRGF0YX0gKSB7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgbG9jYWwgY2FsbCByZXN1bHQuIgogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJldHVyblJlbW90ZURhdGF9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBtYXRjaGVkIHdpdGggcmVtb3RlIHJlc3VsdC4iCiAgICAgICAgKTsKICAgIH0KCn0gICAgI2VuZCBsb29wCgojIGNsZWFudXAKCiMgY2xlYW51cCB3ZWIgc2VydmljZQpteSAkV2Vic2VydmljZURlbGV0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlRGVsZXRlKAogICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZURlbGV0ZSwKICAgICJEZWxldGVkIHdlYiBzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiCik7CgojIGRlbGV0ZSB0aGUgdGlja2V0cwpmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CiAgICBteSAkVGlja2V0RGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldERlbGV0ZSwKICAgICAgICAiVGlja2V0RGVsZXRlKCkgc3VjY2Vzc2Z1bCBmb3IgVGlja2V0IElEICRUaWNrZXRJRCIKICAgICk7Cn0KCiMgZGVsZXRlIGR5bmFtaWMgZmllbGRzCmZvciBteSAkVGVzdEZpZWxkQ29uZmlnSXRlbSAoQFRlc3RGaWVsZENvbmZpZykgewogICAgbXkgJFRlc3RGaWVsZENvbmZpZ0l0ZW1JRCA9ICRUZXN0RmllbGRDb25maWdJdGVtLT57SUR9OwoKICAgIG15ICRERkRlbGV0ZSA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICBJRCAgICAgID0+ICRUZXN0RmllbGRDb25maWdJdGVtSUQsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIFJlb3JkZXIgPT4gMCwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2sKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRERkRlbGV0ZSwKICAgICAgICAiRHluYW1pY0ZpZWxkRGVsZXRlKCkgc3VjY2Vzc2Z1bCBmb3IgRmllbGQgSUQgJFRlc3RGaWVsZENvbmZpZ0l0ZW1JRCIKICAgICk7Cn0KCiMgZ2V0IERCIG9iamVjdApteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiMgZGVsZXRlIHVzZXIKbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB1c2VyX3ByZWZlcmVuY2VzIFdIRVJFIHVzZXJfaWQgPSAkVXNlcklEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJVc2VyIHByZWZlcmVuY2UgcmVmZXJlbmNlZCB0byBVc2VyIElEICRVc2VySUQgaXMgZGVsZXRlZCEiCik7CiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdXNlcnMgV0hFUkUgaWQgPSAkVXNlcklEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJVc2VyIHdpdGggSUQgJFVzZXJJRCBpcyBkZWxldGVkISIKKTsKCiMgZGVsZXRlIHR5cGUKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfdHlwZSBXSEVSRSBpZCA9ICRUeXBlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlR5cGUgd2l0aCBJRCAkVHlwZUlEIGlzIGRlbGV0ZWQhIgopOwoKIyBjbGVhbnVwIGNhY2hlCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCk7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxODZkY2NmODFmOWU1MTA1NGFjNzAzM2M3ODIxNGU1ODI3MjcxYmRlIC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1RyYW5zaXRpb25BY3Rpb24vVGlja2V0U0xBU2V0LnQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCiMgZ2V0IG5lZWRlZCBvYmplY3RzCm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkTW9kdWxlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0U0xBU2V0Jyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSAgPT4gMSwKICAgICAgICBVc2VUbXBBcnRpY2xlRGlyID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZGVmaW5lIHZhcmlhYmxlcwpteSAkVXNlcklEICAgICA9IDE7Cm15ICRNb2R1bGVOYW1lID0gJ1RpY2tldFNMQVNldCc7Cm15ICRSYW5kb21JRCAgID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgYWRkIGEgY3VzdG9tZXIgdXNlcgpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBzZXQgdXNlciBkZXRhaWxzCm15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RVc2VySUQgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAopOwojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNlcnZpY2VUeXBlTGlzdCB9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNMQVR5cGVMaXN0IH07CiMgLS0tCgojCiMgQ3JlYXRlIG5ldyBzZXJ2aWNlcwojCm15IEBTZXJ2aWNlcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlMCcgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICB9LAopOwoKZm9yIG15ICRTZXJ2aWNlRGF0YSAoQFNlcnZpY2VzKSB7CiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoICV7JFNlcnZpY2VEYXRhfSApOwoKICAgICMgc2FuaXR5IHRlc3QKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkU2VydmljZUlELAogICAgICAgIHVuZGVmLAogICAgICAgICJTZXJ2aWNlQWRkKCkgZm9yICRTZXJ2aWNlRGF0YS0+e05hbWV9LCBTZXJ2aWNlSUQgc2hvdWxkIG5vdCBiZSB1bmRlZiIsCiAgICApOwoKICAgICMgc3RvcmUgdGhlIFNlcnZpY2VJRAogICAgJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSA9ICRTZXJ2aWNlSUQ7Cn0KCiMKIyBDcmVhdGUgbmV3IFNMQXMKIwpteSBAU0xBcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICdTTEEwJyAuICRSYW5kb21JRCwKICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCiMgLS0tCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAnU0xBMScgLiAkUmFuZG9tSUQsCiAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0gXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAojIC0tLQogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQTInIC4gJFJhbmRvbUlELAogICAgICAgIFNlcnZpY2VJRHMgPT4gW10sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKIyAtLS0KICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkU0xBRGF0YSAoQFNMQXMpIHsKICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCggJXskU0xBRGF0YX0gKTsKCiAgICAjIHNhbml0eSB0ZXN0CiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJFNMQUlELAogICAgICAgIHVuZGVmLAogICAgICAgICJTTEFBZGQoKSBmb3IgJFNMQURhdGEtPntOYW1lfSwgU0xBSUQgc2hvdWxkIG5vdCBiZSB1bmRlZiIsCiAgICApOwoKICAgICMgc3RvcmUgdGhlIFNMQUlECiAgICAkU0xBRGF0YS0+e1NMQUlEfSA9ICRTTEFJRDsKfQoKIwojIEFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lciAoMCBhbmQgMSkKIwpteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgojCiMgQ3JlYXRlIGEgdGVzdCB0aWNrZXRzCiMKbXkgQFRpY2tldERhdGE7CmZvciBteSAkSXRlbSAoIDAgLi4gMSApIHsKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSA9PiAoICRJdGVtID09IDAgKSA/ICRTTEFzWzBdLT57U0xBSUR9IDogJ3Rlc3QnLAogICAgICAgIFF1ZXVlSUQgICAgICAgPT4gMSwKICAgICAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgIFByaW9yaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICBTdGF0ZUlEICAgICAgID0+IDEsCiAgICAgICAgVHlwZUlEICAgICAgICA9PiAxLAogICAgICAgIFNlcnZpY2UgICAgICAgPT4gKCAkSXRlbSA9PSAwICkgPyAkU2VydmljZXNbMF0tPntOYW1lfSA6IHVuZGVmLAogICAgICAgIEN1c3RvbWVyVXNlciAgPT4gKCAkSXRlbSA9PSAwICkgPyAkVGVzdEN1c3RvbWVyVXNlckxvZ2luIDogdW5kZWYsCiAgICAgICAgT3duZXJJRCAgICAgICA9PiAxLAogICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrcwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldElELAogICAgICAgICJUaWNrZXRDcmVhdGUoKSAtICRUaWNrZXRJRCIsCiAgICApOwoKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0ICksCiAgICAgICAgIlRpY2tldEdldCgpIC0gR2V0IFRpY2tldCB3aXRoIElEICRUaWNrZXRJRC4iLAogICAgKTsKCiAgICBwdXNoIEBUaWNrZXREYXRhLCBcJVRpY2tldDsKfQoKIyBSdW4oKSB0ZXN0cwpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnTm8gUGFyYW1zJywKICAgICAgICBDb25maWcgID0+IHVuZGVmLAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBVc2VySUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiB1bmRlZiwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAndGVzdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVGlja2V0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IHVuZGVmLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAndGVzdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4ge30sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFRpY2tldCBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gMSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgQ29uZmlnIEZvcm1hdCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IDEsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU0xBJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU0xBSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vdCBhc3NpZ25lZCBTTEEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJFNMQXNbMl0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdOb3QgQXNzaWduZWQgU0xBSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1syXS0+e1NMQUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBzZXJ2aWNlIHdpdGggU0xBICRTTEFzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMV0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIlRpY2tldCB3aXRob3V0IHNlcnZpY2Ugd2l0aCBTTEFJRCAkU0xBc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzFdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTTEEgJFNMQXNbMF0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSA9PiAkU0xBc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU0xBICRTTEFzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJFNMQXNbMV0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNMQUlEICRTTEFzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1swXS0+e1NMQUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNMQUlEICRTTEFzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU0xBc1swXS0+e1NMQUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFRpY2tldC0+VGl0bGUiLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAnPE9UUlNfVElDS0VUX1RpdGxlPicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBUaWNrZXQtPk5vdEV4aXN0aW5nIiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJzxPVFJTX1RJQ0tFVF9Ob3RFeGlzdGluZz4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVXNpbmcgRGlmZmVyZW50IFVzZXJJRCIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSAgICA9PiAkU0xBc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBtYWtlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICBteSAkT3JpZ1Rlc3QgPSBTdG9yYWJsZTo6ZGNsb25lKCRUZXN0KTsKCiAgICBteSAkU3VjY2VzcyA9ICRNb2R1bGVPYmplY3QtPlJ1bigKICAgICAgICAleyAkVGVzdC0+e0NvbmZpZ30gfSwKICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgICAgICAgPT4gJ1AxJywKICAgICAgICBBY3Rpdml0eUVudGl0eUlEICAgICAgICAgPT4gJ0ExJywKICAgICAgICBUcmFuc2l0aW9uRW50aXR5SUQgICAgICAgPT4gJ1QxJywKICAgICAgICBUcmFuc2l0aW9uQWN0aW9uRW50aXR5SUQgPT4gJ1RBMScsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTdWNjZXNzfSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4ZWN1dGVkIHdpdGggVHJ1ZSIKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0RGF0YVswXS0+e1RpY2tldElEfTsKICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1RpY2tldH0tPntUaWNrZXRJRH0gZXEgJFRpY2tldERhdGFbMV0tPntUaWNrZXRJRH0gKSB7CiAgICAgICAgICAgICRUaWNrZXRJRCA9ICRUaWNrZXREYXRhWzFdLT57VGlja2V0SUR9OwogICAgICAgIH0KICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30gfSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIiRNb2R1bGVOYW1lIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBBdHRyaWJ1dGU6ICRBdHRyaWJ1dGUgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIGV4aXN0cyB3aXRoIFRydWUiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEV4cGVjdGVkVmFsdWUgPSAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0KICAgICAgICAgICAgICAgID1+IG17XEE8T1RSU19USUNLRVRfKFtBLVphLXowLTlfXSspPlx6fW1zeAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSA9ICRUaWNrZXR7JDF9IC8vICcnOwogICAgICAgICAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIHZhbHVlOiAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9IHNob3VsZCBiZWVuIHJlcGxhY2VkIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBtYXRjaCBleHBlY3RlZCB2YWx1ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57VXNlcklEfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiBVc2VySUQgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIHNob3VsZCBiZSByZW1vdmVkIChhcyBpdCB3YXMgdXNlZCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhlY3V0ZWQgd2l0aCBGYWxzZSIKICAgICAgICApOwogICAgfQp9CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UuCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxODZkY2NmODFmOWU1MTA1NGFjNzAzM2M3ODIxNGU1ODI3MjcxYmRlIC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1RyYW5zaXRpb25BY3Rpb24vVGlja2V0U2VydmljZVNldC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkTW9kdWxlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0U2VydmljZVNldCcpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgID0+IDEsCiAgICAgICAgVXNlVG1wQXJ0aWNsZURpciA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGRlZmluZSB2YXJpYWJsZXMKbXkgJFVzZXJJRCAgICAgPSAxOwpteSAkTW9kdWxlTmFtZSA9ICdUaWNrZXRTZXJ2aWNlU2V0JzsKbXkgJFJhbmRvbUlEICAgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyBhZGQgYSBjdXN0b21lciB1c2VyCm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CgojIHNldCB1c2VyIGRldGFpbHMKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkVGVzdFVzZXJJRCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCik7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU2VydmljZVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyAkU2VydmljZVR5cGVMaXN0IH07CiMgLS0tCgojCiMgQ3JlYXRlIG5ldyBzZXJ2aWNlcwojCm15IEBTZXJ2aWNlcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlMCcgLiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ1NlcnZpY2UxJyAuICRSYW5kb21JRCwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTInIC4gJFJhbmRvbUlELAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkU2VydmljZURhdGEgKEBTZXJ2aWNlcykgewogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKCAleyRTZXJ2aWNlRGF0YX0gKTsKCiAgICAjIHNhbml0eSB0ZXN0CiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICB1bmRlZiwKICAgICAgICAiU2VydmljZUFkZCgpIGZvciAkU2VydmljZURhdGEtPntOYW1lfSwgU2VydmljZUlEIHNob3VsZCBub3QgYmUgdW5kZWYiLAogICAgKTsKCiAgICAjIHN0b3JlIHRoZSBTZXJ2aWNlSUQKICAgICRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0gPSAkU2VydmljZUlEOwp9CgojCiMgQXNzaWduIHNlcnZpY2VzIHRvIGN1c3RvbWVyICgwIGFuZCAxKQojCm15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgdGVzdAokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoKSBmb3IgdXNlciAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLCBhbmQgU2VydmljZSAkU2VydmljZXNbMF0tPntOYW1lfSIKICAgICAgICAuICIgd2l0aCB0cnVlIiwKKTsKCiRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VzWzFdLT57U2VydmljZUlEfSwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgdGVzdAokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoKSBmb3IgdXNlciAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLCBhbmQgU2VydmljZSAkU2VydmljZXNbMV0tPntOYW1lfSIKICAgICAgICAuICIgd2l0aCB0cnVlIiwKKTsKCiMKIyBDcmVhdGUgYSB0ZXN0IHRpY2tldHMKIwpteSBAVGlja2V0RGF0YTsKZm9yIG15ICRJdGVtICggMCAuLiAxICkgewogICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgIFRpdGxlID0+ICggJEl0ZW0gPT0gMCApID8gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSA6ICd0ZXN0JywKICAgICAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICAgICAgTG9jayAgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICBQcmlvcml0eSAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgICAgIFR5cGVJRCAgICAgICAgPT4gMSwKICAgICAgICBDdXN0b21lclVzZXIgID0+ICggJEl0ZW0gPT0gMCApID8gJFRlc3RDdXN0b21lclVzZXJMb2dpbiA6IHVuZGVmLAogICAgICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgICAgICBSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRJRCwKICAgICAgICAiVGlja2V0Q3JlYXRlKCkgLSAkVGlja2V0SUQiLAogICAgKTsKCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXQgKSwKICAgICAgICAiVGlja2V0R2V0KCkgLSBHZXQgVGlja2V0IHdpdGggSUQgJFRpY2tldElELiIsCiAgICApOwoKICAgIHB1c2ggQFRpY2tldERhdGEsIFwlVGlja2V0OwoKfQoKIyBSdW4oKSB0ZXN0cwpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnTm8gUGFyYW1zJywKICAgICAgICBDb25maWcgID0+IHVuZGVmLAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBVc2VySUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiB1bmRlZiwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAndGVzdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVGlja2V0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IHVuZGVmLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAndGVzdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4ge30sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFRpY2tldCBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gMSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZyBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNlcnZpY2UnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU2VydmljZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm90IGFzc2lnbmVkIFNlcnZpY2UnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1syXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vdCBBc3NpZ25lZCBTZXJ2aWNlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzJdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBjdXN0b21lciB3aXRoIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMV0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzBdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiVGlja2V0IHdpdGhvdXQgY3VzdG9tZXIgd2l0aCBTZXJ2aWNlSUQgJFNlcnZpY2VzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMV0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZSAkU2VydmljZXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VzWzFdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTZXJ2aWNlSUQgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNlcnZpY2VJRCAkU2VydmljZXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXNbMV0tPntTZXJ2aWNlSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVGlja2V0LT5UaXRsZSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnPE9UUlNfVElDS0VUX1RpdGxlPicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiV3JvbmcgVGlja2V0LT5Ob3RFeGlzdGluZyIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnPE9UUlNfVElDS0VUX05vdEV4aXN0aW5nPicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBVc2luZyBEaWZmZXJlbnQgVXNlcklEIiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZSA9PiAkU2VydmljZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIG1ha2UgYSBkZWVwIGNvcHkgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGRlZmluaXRpb24KICAgIG15ICRPcmlnVGVzdCA9IFN0b3JhYmxlOjpkY2xvbmUoJFRlc3QpOwoKICAgIG15ICRTdWNjZXNzID0gJE1vZHVsZU9iamVjdC0+UnVuKAogICAgICAgICV7ICRUZXN0LT57Q29uZmlnfSB9LAogICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgICAgICAgICA9PiAnUDEnLAogICAgICAgIEFjdGl2aXR5RW50aXR5SUQgICAgICAgICA9PiAnQTEnLAogICAgICAgIFRyYW5zaXRpb25FbnRpdHlJRCAgICAgICA9PiAnVDEnLAogICAgICAgIFRyYW5zaXRpb25BY3Rpb25FbnRpdHlJRCA9PiAnVEExJywKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhlY3V0ZWQgd2l0aCBUcnVlIgogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRpY2tldAogICAgICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXREYXRhWzBdLT57VGlja2V0SUR9OwogICAgICAgIGlmICggJFRlc3QtPntDb25maWd9LT57VGlja2V0fS0+e1RpY2tldElEfSBlcSAkVGlja2V0RGF0YVsxXS0+e1RpY2tldElEfSApIHsKICAgICAgICAgICAgJFRpY2tldElEID0gJFRpY2tldERhdGFbMV0tPntUaWNrZXRJRH07CiAgICAgICAgfQoKICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30gfSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIiRNb2R1bGVOYW1lIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBBdHRyaWJ1dGU6ICRBdHRyaWJ1dGUgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIGV4aXN0cyB3aXRoIFRydWUiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEV4cGVjdGVkVmFsdWUgPSAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0KICAgICAgICAgICAgICAgID1+IG17XEE8T1RSU19USUNLRVRfKFtBLVphLXowLTlfXSspPlx6fW1zeAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSA9ICRUaWNrZXR7JDF9IC8vICcnOwogICAgICAgICAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIHZhbHVlOiAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9IHNob3VsZCBiZWVuIHJlcGxhY2VkIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBtYXRjaCBleHBlY3RlZCB2YWx1ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57VXNlcklEfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiBVc2VySUQgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIHNob3VsZCBiZSByZW1vdmVkIChhcyBpdCB3YXMgdXNlZCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhlY3V0ZWQgd2l0aCBGYWxzZSIKICAgICAgICApOwogICAgfQp9CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UuCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAyYmU2ZjZiYTQzOTZkOTBkYmZiYzU0ZmU3NGE3NzVjM2NhYzE2MDkxIC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1Byb2Nlc3MudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkUXVldWVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkUHJvY2Vzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgID0+IDEsCiAgICAgICAgVXNlVG1wQXJ0aWNsZURpciA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGNyZWF0ZSBjb21tb24gb2JqZWN0cyB0byBiZSB1c2VkIGluIEFjdGl2aXR5RGlhbG9nIG9iamVjdCBjcmVhdGlvbgpteSAlQ29tbW9uT2JqZWN0OwokQ29tbW9uT2JqZWN0e0FjdGl2aXR5T2JqZWN0fSAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eScpOwokQ29tbW9uT2JqZWN0e0FjdGl2aXR5RGlhbG9nT2JqZWN0fSAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwokQ29tbW9uT2JqZWN0e1RyYW5zaXRpb25PYmplY3R9ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uJyk7CiRDb21tb25PYmplY3R7VHJhbnNpdGlvbkFjdGlvbk9iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb24nKTsKJENvbW1vbk9iamVjdHtUaWNrZXRPYmplY3R9ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgY3JlYXRlIHNvbWUgcXVldWVzIGluIHRoZSBzeXN0ZW0KbXkgJVF1ZXVlRGF0YTEgPSAoCiAgICBOYW1lICAgICAgICAgICAgPT4gJ1F1ZXVlMScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgpteSAlUXVldWVEYXRhMiA9ICgKICAgIE5hbWUgICAgICAgICAgICA9PiAnUXVldWUyJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKKTsKCm15ICVRdWV1ZURhdGEzID0gKAogICAgTmFtZSAgICAgICAgICAgID0+ICdRdWV1ZTMnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAopOwoKbXkgJFF1ZXVlSUQxID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCglUXVldWVEYXRhMSk7CgojIHNhbml0eSBjaGVjawokU2VsZi0+SXNOb3QoCiAgICAkUXVldWVJRDEsCiAgICB1bmRlZiwKICAgICJRdWV1ZUFkZCgpIC0gQWRkZWQgcXVldWUgJyRRdWV1ZURhdGExe05hbWV9JyBmb3IgQUNMIGNoZWNrIC0gc2hvdWxkIG5vdCBiZSB1bmRlZiIKKTsKCm15ICRRdWV1ZUlEMiA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoJVF1ZXVlRGF0YTIpOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPklzTm90KAogICAgJFF1ZXVlSUQyLAogICAgdW5kZWYsCiAgICAiUXVldWVBZGQoKSAtIEFkZGVkIHF1ZXVlICckUXVldWVEYXRhMntOYW1lfScgZm9yIEFDTCBjaGVjayAtIHNob3VsZCBub3QgYmUgdW5kZWYiCik7CgpteSAkUXVldWVJRDMgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKCVRdWV1ZURhdGEzKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5Jc05vdCgKICAgICRRdWV1ZUlEMywKICAgIHVuZGVmLAogICAgIlF1ZXVlQWRkKCkgLSBBZGRlZCBxdWV1ZSAnJFF1ZXVlRGF0YTN7TmFtZX0nIGZvciBBQ0wgY2hlY2sgLSBzaG91bGQgbm90IGJlIHVuZGVmIgopOwoKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgR2V0IFNlcnZpY2VPYmplY3QuCm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTZXJ2aWNlVHlwZUxpc3QgfTsKCiMgZ2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTTEFUeXBlTGlzdCB9OwojIC0tLQoKbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAkUmFuZG9tSUQsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCm15ICRTTEFJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBQWRkKAogICAgU2VydmljZUlEcyA9PiBbJFNlcnZpY2VJRF0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKIyAtLS0KICAgIE5hbWUgICAgICAgPT4gJFJhbmRvbUlELAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgVXNlcklEICAgICA9PiAxLAopOwoKbXkgJFRpY2tldElEID0gJENvbW1vbk9iamVjdHtUaWNrZXRPYmplY3R9LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlRGF0YTN7TmFtZX0sCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQgfHwgMCwKICAgICJUaWNrZXRDcmVhdGUoKSBUZXN0dGlja2V0IGZvciBVbml0dGVzdHMgY3JlYXRlZCIsCik7CgpteSBAVGVzdHMgPSAoCgogICAgIyBHZXQgb24gbm8gY29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc0dldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyAgICAgICAgICA9PiB7fSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICd1bmtub3duMTIzJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKE5vIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIEdldCBvbiBubyBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzR2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAndW5rbm93bicgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0dldCgpICh1bmtub3duIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICB7CiAgICAgICAgUHJvY2Vzc0dldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBNZXNzYWdlICA9PiAnUHJvY2Vzc0dldCgpIChObyBQcm9jZXNzRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIEdldCBvbiBpbnZhbGlkIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICd1bmtub3duMTIzJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKHVua25vd24gUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgR2V0IG9uIHZhbGlkIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0dldCgpIChrbm93biBQcm9jZXNzRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBHZXQgb24gdmFsaWQgUHJvY2Vzc0VudGl0eUlEIFVURjgKICAgIHsKICAgICAgICBQcm9jZXNzR2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICfDpMO2w7zDn8OEw5bDnOKCrNC40YHDocOpw63DusOzw7rDgcOJw43Dk8Oaw7HDkS3jgqvjgrnjgr8t55So6L+O5L2/55SoLdCv0LfRi9C6JywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NHZXQoKSAoa25vd24gUHJvY2Vzc0VudGl0eUlEIFVURjgpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PgogICAgICAgICAgICAgICAgICAgICfDpMO2w7zDn8OEw5bDnOKCrNC40YHDocOpw63DusOzw7rDgcOJw43Dk8Oaw7HDkS3jgqvjgrnjgr8t55So6L+O5L2/55SoLdCv0LfRi9C6JywKICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTGlzdCBvbiBpbnZhbGlkIENvbmZpZwogICAgewogICAgICAgIFByb2Nlc3NMaXN0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFsgJ0FjdGl2ZScsICdGYWRlQXdheScsICdJbmFjdGl2ZScgXSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzTGlzdCgpIChpbnZhbGlkIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIExpc3Qgb24gdmFsaWQgQ29uZmlnLCBtaXNzaW5nIFByb2Nlc3NTdGF0ZQogICAgewogICAgICAgIFByb2Nlc3NMaXN0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBQcm9jZXNzU3RhdGUgICAgPT4gW10sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAodmFsaWQgQ29uZmlnLCBtaXNzaW5nIFByb2Nlc3NTdGF0ZSknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIExpc3Qgb24gdmFsaWQgQ29uZmlnLCByaWdodCBQcm9jZXNzU3RhdGUKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFsgJ0FjdGl2ZScsICdGYWRlQXdheScsICdJbmFjdGl2ZScgXSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzTGlzdCgpICh2YWxpZCBDb25maWcsIHJpZ2h0IFByb2Nlc3NTdGF0ZSknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAnUDEnID0+ICdCb29rIE9yZGVycycKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIExpc3Qgb24gdmFsaWQgQ29uZmlnLCB3cm9uZyBQcm9jZXNzU3RhdGUKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFsgJ0ZhZGVBd2F5JywgJ0luYWN0aXZlJyBdLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NMaXN0KCkgKHZhbGlkIENvbmZpZywgd3JvbmcgUHJvY2Vzc1N0YXRlKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgID0+IHt9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTGlzdCBvbiB2YWxpZCBDb25maWcsIHdyb25nIGludGVyZmFjZQogICAgewogICAgICAgIFByb2Nlc3NMaXN0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHlEaWFsb2cnID0+IHsKICAgICAgICAgICAgICAgICAgICAnQUQxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gWydDdXN0b21lckludGVyZmFjZSddLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdBY3Rpdml0eSBEaWFsb2cgMScsCiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJ0FEMSBQcm9jZXNzIFNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAnQUQxIFByb2Nlc3MgTG9uZyBkZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgPT4gJzA3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+ICcyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICA9PiAnMDgtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgPT4gJzMnLAogICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZF9NYWtlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICAgICAgICAgID0+IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICA9PiAnTWFrZSBMb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICdNYWtlIFNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF9NYWtlJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0QWR2aWNlVGV4dCA9PiAnTk9URTogSWYgeW91IHN1Ym1pdCB0aGUgZm9ybSAuLi4nLAogICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXRCdXR0b25UZXh0ID0+ICdNYWtlIGFuIGlucXVpcnknLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFsnQWN0aXZlJ10sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICA9PiBbJ0FnZW50SW50ZXJmYWNlJ10sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAodmFsaWQgQ29uZmlnLCB3cm9uZyBJbnRlcmZhY2UpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4ge30sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgcmlnaHQgaW50ZXJmYWNlCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eURpYWxvZycgPT4gewogICAgICAgICAgICAgICAgICAgICdBRDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiBbJ0FnZW50SW50ZXJmYWNlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ0FjdGl2aXR5IERpYWxvZyAxJywKICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCA9PiAnQUQxIFByb2Nlc3MgU2hvcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgID0+ICdBRDEgUHJvY2VzcyBMb25nIGRlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICA9PiAnMDctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJzInLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgID0+ICcwOC0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAnMycsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX01ha2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgICAgICAgICAgPT4gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgID0+ICdNYWtlIExvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJ01ha2UgU2hvcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkX01ha2UnLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXRBZHZpY2VUZXh0ID0+ICdOT1RFOiBJZiB5b3Ugc3VibWl0IHRoZSBmb3JtIC4uLicsCiAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdEJ1dHRvblRleHQgPT4gJ01ha2UgYW4gaW5xdWlyeScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBQcm9jZXNzU3RhdGUgICAgPT4gWydBY3RpdmUnXSwKICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgID0+IFsnQWdlbnRJbnRlcmZhY2UnXSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzTGlzdCgpICh2YWxpZCBDb25maWcsIHJpZ2h0IEludGVyZmFjZSknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7ICdQMScgPT4gJ0Jvb2sgT3JkZXJzJyB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgb24gaW52YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzU3RhcnRwb2ludEdldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc1N0YXJ0cG9pbnRHZXQoKSAoaW52YWxpZCBTdGFydCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIFByb2Nlc3NTdGFydHBvaW50R2V0IG9uIHZhbGlkIENvbmZpZwogICAgewogICAgICAgIFByb2Nlc3NTdGFydHBvaW50R2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NTdGFydHBvaW50R2V0KCkgKHZhbGlkIFN0YXJ0KScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgIEFjdGl2aXR5c2V0ICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gbWlzc2luZyBQcm9jZXNzRW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiB1bmRlZiwKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtaXNzaW5nIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgQWN0aXZpdHlFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1pc3NpbmcgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgVGlja2V0SUQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWlzc2luZyBUaWNrZXRJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgVXNlcklECiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWlzc2luZyBVc2VySUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBpbnZhbGlkIFRpY2tldElECiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAoaW52YWxpZCBUaWNrZXRJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIGludmFsaWQgUHJvY2VzcyBDb25maWd1cmF0aW9uCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKGludmFsaWQgUHJvY2VzcyBDb25maWd1cmF0aW9uKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gbWlzc2luZyBBY3Rpdml0c2V0cyBpbiBQcm9jZXNzLT5QYXRoCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtaXNzaW5nIHJlcXVpcmVkIEFjdGl2aXR5IGluIFBhdGggQ29uZmlnKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgRGVidWcgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBubyBtYXRjaGluZyBUcmFuc2l0aW9uCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobm8gbWF0Y2hpbmcgVHJhbnNpdGlvbiknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIERlYnVnICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gbWF0Y2hpbmcgVHJhbnNpdGlvbiBDaGVjayBPbmx5CiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHknID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDEgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDIgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDMgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTQnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDQgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGVja09ubHkgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1hdGNoaW5nIFRyYW5zaXRpb24gQ2hlY2sgT25seSknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1hdGNoaW5nIFRyYW5zaXRpb24gY2hhbmdlIEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0CiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHknID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDEgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDIgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDMgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTQnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDQgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGVja09ubHkgICAgICAgID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1hdGNoaW5nIFRyYW5zaXRpb24gY2hhbmdlIEFjdGl2aXR5RW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnVHJ1ZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgb24gbm8gQWN0aXZpdHlFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggbm8gQWN0aXZpdHlFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIG5vIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+IHVuZGVmLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggbm8gUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgb24gbm8gVGlja2V0SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCgpIChTZXQgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCBubyBUaWNrZXRJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIGludmFsaWQgQWN0aXZpdHlFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCgpIChTZXQgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCBpbnZhbGlkIEFjdGl2aXR5RW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCBvbiBpbnZhbGlkIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMicsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCgpIChTZXQgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCBpbnZhbGlkIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIHZhbGlkIENvbmZpZwogICAgewogICAgICAgIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCgpIChTZXQgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCB2YWxpZCBDb25maWcpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ1RydWUnLAogICAgICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgb24gaW52YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxNycsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQoKSAoU2V0IFByb2Nlc3NFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCBpbnZhbGlkIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgb24gaW52YWxpZCBUaWNrZXRJRAogICAgewogICAgICAgIFByb2Nlc3NUaWNrZXRQcm9jZXNzU2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQoKSAoU2V0IFByb2Nlc3NFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCBpbnZhbGlkIFRpY2tldElEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCBvbiB2YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCgpIChTZXQgUHJvY2Vzc0VudGl0eUlEIG9uIFRpY2tldCB3aXRoIHZhbGlkIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnVHJ1ZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBUcmFuc2l0aW9uICsgUXVldWVNb3ZlIFRyYW5zaXRpb25BY3Rpb24gb24gbWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQKICAgICMgYW5kIG1vdmUgaXQgdG8gUXVldWUxCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbkFjdGlvbiA9PiBbJ1RBMSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMiBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMyBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgNCBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uQWN0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1RBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWV1ZSBNb3ZlJywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRRdWV1ZVNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhMXtOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVEEyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1F1ZXVlIE1vdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFF1ZXVlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRRdWV1ZURhdGEye05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVldWUgTW92ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0UXVldWVTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlRGF0YTN7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBhbmQgQWN0aW9uIFF1ZXVlIE1vdmUgdG8gTWlzYyknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnVHJ1ZScsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uICsgUXVldWVNb3ZlIFRyYW5zaXRpb25BY3Rpb24gb24gbWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQgMQogICAgIyBiYWNrIHRvIEExIGFuZCBtb3ZlIGl0IGJhY2sgdG8gUXVldWUzCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gNCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uQWN0aW9uID0+IFsnVEExJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Q0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbkFjdGlvbiA9PiBbJ1RBMyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAyIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAzIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0E0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSA0IG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb25BY3Rpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVEExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1F1ZXVlIE1vdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFF1ZXVlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRRdWV1ZURhdGExe05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVldWUgTW92ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0UXVldWVTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlRGF0YTJ7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1RBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWV1ZSBNb3ZlJywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRRdWV1ZVNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhM3tOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGVja09ubHkgICAgICAgID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVHJhbnNpdGlvbigpIChtYXRjaGluZyBUcmFuc2l0aW9uIGNoYW5nZSBBY3Rpdml0eUVudGl0eUlEIGFuZCBUcmFuc2l0aW9uQWN0aW9uIFF1ZXVlIE1vdmUgdG8gUmF3KScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdUcnVlJywKICAgICAgICAgICAgfQogICAgfSwKCiAjIFRyYW5zaXRpb24gKyBUaWNrZXRTZXJ2aWNlU2V0ICsgVGlja2V0U0xBU2V0IFRyYW5zaXRpb25BY3Rpb24gb24gbWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgU2VydmljZSBhbmQgU0xBIG9uIFRpY2tldAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiAxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbkFjdGlvbiA9PiBbICdUQTEnLCAnVEEyJyBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMiBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6VHJhbnNpdGlvbkFjdGlvbicgPT4gewogICAgICAgICAgICAgICAgICAgICdUQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZSBTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFNlcnZpY2VTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1RBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEEgU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRTTEFTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBBY3Rpb25zIFNlcnZpY2UgU2V0IGFuZCBTTEEgU2V0KScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgID0+ICdUaWNrZXRWYWx1ZXMnLAogICAgICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufSApIHsKCiAgICAgICAgIyBTZXQgQ29uZmlnCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntDb25maWd9ICkgKSB7CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnICggc29ydCBrZXlzICV7ICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57Q29uZmlnfSB9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntDb25maWd9LT57JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgICAgPT4gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4Y3VzZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVHJhbnNpdGlvbiggJXsgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUcmFuc2l0aW9uIC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVHJhbnNpdGlvbiAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzVHJhbnNpdGlvbiAtIENoZWNrIGdpdmVuIGFuZCBleHBlY3RlZCByZXN1bHQKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntUZXN0VHlwZX0gZXEgJ1RpY2tldFZhbHVlcycgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUcm5zaXRpb24gLSBDaGVjayB0aWNrZXQgdmFsdWVzIGFmdGVyIGFsbCB0cmFuc2l0aW9uIGFjdGlvbnMKICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRDb21tb25PYmplY3R7VGlja2V0T2JqZWN0fS0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e0V4cGVjdGVkUmVzdWx0fSB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0gLy8gJycsCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntFeHBlY3RlZFJlc3VsdH0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntNZXNzYWdlfSAtIFRpY2tldCAkQXR0cmlidXRlIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGFkIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCByZXN0b3JlIFByb2Nlc3NPYmplY3QgdG8gZGVmYXVsdAogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fS0+e0NvbmZpZ30gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb25maWcgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fS0+e0NvbmZpZ30tPnskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fS0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0UHJvY2Vzc1NldCggJXsgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUaWNrZXRQcm9jZXNzU2V0IC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGFkIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCByZXN0b3JlIFByb2Nlc3NPYmplY3QgdG8gZGVmYXVsdAogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fSApIHsKCiAgICAgICAgIyBTZXQgQ29uZmlnCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9LT57Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntDb25maWd9LT57JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fS0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoICV7ICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCAtIENoZWNrIG9uIEZhbHNlCiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgLSBDaGVjayBvbiBUcnVlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0NvbmZpZ30gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb25maWcgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntQcm9jZXNzTGlzdH0tPntDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0NvbmZpZ30tPnskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzTGlzdH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzTGlzdCggJXsgJFRlc3QtPntQcm9jZXNzTGlzdH0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NMaXN0IC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzTGlzdH0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzTGlzdCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzTGlzdH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzTGlzdH0tPntSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzTGlzdCAtIENoZWNrIGdpdmVuIGFuZCBleHBlY3RlZCByZXN1bHQKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhZCBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgcmVzdG9yZSBQcm9jZXNzT2JqZWN0IHRvIGRlZmF1bHQKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NHZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NHZXR9LT57Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NHZXR9LT57Q29uZmlnfSB9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntQcm9jZXNzR2V0fS0+e0NvbmZpZ30tPnskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzR2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc0dldH0tPntEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4ZWN1dGUgcHJvY2VzcyBvYmplY3QgY2FsbAogICAgICAgIG15ICRSZXN1bHQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0dldCggJXsgJFRlc3QtPntQcm9jZXNzR2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzR2V0fS0+e1Rlc3RUeXBlfSBlcSAnRmFsc2UnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzR2V0IC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0dldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NHZXR9LT57VGVzdFR5cGV9IGVxICdUcnVlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc0dldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzR2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc0dldH0tPntUZXN0VHlwZX0gZXEgJ1Jlc3VsdCcgKSB7CiAgICAgICAgICAgIG15ICRFeHBlY3RlZFJlc3VsdCA9ICRUZXN0LT57UHJvY2Vzc0dldH0tPntSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzR2V0IC0gQ2hlY2sgZ2l2ZW4gYW5kIGV4cGVjdGVkIHJlc3VsdAogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJEV4cGVjdGVkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzR2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH0gKSB7CgogICAgICAgICMgU2V0IENvbmZpZwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9LT57Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e0NvbmZpZ30gfSApIHsKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9LT57Q29uZmlnfS0+eyRDb25maWd9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYXZlIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCB3ZSBuZWVkIGEgbmV3IFByb2Nlc3NPYmplY3QKICAgICAgICAjIHdpdGggRGVidWcgdHVybmVkIG9uCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9LT57RGVidWd9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBleGVjdXRlIHByb2Nlc3Mgb2JqZWN0IGNhbGwKICAgICAgICBteSAkUmVzdWx0ID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NTdGFydHBvaW50R2V0KCAleyAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH0tPntUZXN0VHlwZX0gZXEgJ0ZhbHNlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgLSBDaGVjayBvbiBGYWxzZQogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e1Rlc3RUeXBlfSBlcSAnVHJ1ZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NTdGFydHBvaW50R2V0IC0gQ2hlY2sgb24gVHJ1ZQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxZWFjYTM0MjU3NzgyYzBmOTFkMDVlM2VlYTEzMzFkMjdjMDgxYTA3IC0gc2NyaXB0cy90ZXN0L1N0YXRzL1RpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lR2V0U3RhdEVsZW1lbnQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlICA9PiAxLAogICAgICAgIFVzZVRtcEFydGljbGVEaXIgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwpteSAkQmFja2VuZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7Cm15ICRUaWNrZXRPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKbXkgJEFydGljbGVPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwpteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoIENoYW5uZWxOYW1lID0+ICdJbnRlcm5hbCcgKTsKbXkgJFNlcnZpY2VPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTZXJ2aWNlVHlwZUxpc3QgfTsKCiMgZ2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTTEFUeXBlTGlzdCB9OwojIC0tLQoKIyBFbmFibGUgU2VydmljZS4KJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIEtleSAgID0+ICdUaWNrZXQ6OlNlcnZpY2UnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgVXNlIGEgY2FsZW5kYXIgd2l0aCB0aGUgc2FtZSBidXNpbmVzcyBob3VycyBmb3IgZXZlcnkgZGF5IHNvIHRoYXQgdGhlIFVUIHJ1bnMgY29ycmVjdGx5CiMgICBvbiBldmVyeSBkYXkgb2YgdGhlIHdlZWsgYW5kIG91dHNpZGUgdXN1YWwgYnVzaW5lc3MgaG91cnMuCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBLZXkgICA9PiAnVGltZVdvcmtpbmdIb3Vyczo6Q2FsZW5kYXIxJywKICAgIFZhbHVlID0+IHsKICAgICAgICBtYXAgeyAkXyA9PiBbIDAgLi4gMjMgXSB9IHF3KCBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCBTdW4gKSwKICAgIH0sCik7CgojIERpc2FibGUgZGVmYXVsdCBWYWNhdGlvbiBkYXlzLgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgS2V5ICAgPT4gJ1RpbWVWYWNhdGlvbkRheXMnLAogICAgVmFsdWUgPT4ge30sCik7CgojIFNldCBmaXhlZCB0aW1lLgokSGVscGVyLT5GaXhlZFRpbWVTZXQoKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpOwoKIyBDcmVhdGUgYSB0ZXN0IGN1c3RvbWVyLgpteSAkVGVzdFVzZXJDdXN0b21lciA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgQ3JlYXRlIGEgZHluYW1pYyBmaWVsZC4KbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAiVGVzdERGJFJhbmRvbUlEIjsKbXkgJEZpZWxkSUQgICAgICAgICAgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICBOYW1lICAgICAgID0+ICREeW5hbWljRmllbGROYW1lLAogICAgRmllbGRPcmRlciA9PiA5OTkyLAogICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlICAgPT4gJ0RlZmF1bHQnLAogICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgSXRlbTEgPT4gJ1ZhbHVlMScsCiAgICAgICAgICAgIGl0ZW0yID0+ICdWYWx1ZTInLAogICAgICAgIH0sCiAgICB9LAogICAgTGFiZWwgICAgICA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBSZW9yZGVyICAgID0+IDAsCik7CiRTZWxmLT5UcnVlKAogICAgJEZpZWxkSUQsCiAgICAiRHluYW1pY0ZpZWxkQWRkKCkgc3VjY2Vzc2Z1bCBmb3IgRmllbGQgSUQgJEZpZWxkSUQiLAopOwoKIyBBZGQgdGVzdCBTZXJ2aWNlLgpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICJUZXN0U2VydmljZSAtICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRCwKICAgICJTZXJ2aWNlICRTZXJ2aWNlSUQgaGFzIGJlZW4gY3JlYXRlZC4iLAopOwoKIyBBZGQgc2VydmljZSBmb3IgdGhlIHRlc3QgY3VzdG9tZXIuCiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RVc2VyQ3VzdG9tZXIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIEFkZCB0ZXN0IFNMQS4KbXkgJFNMQUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFBZGQoCiAgICBOYW1lICAgICAgICAgICAgICAgID0+ICJUZXN0U0xBIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFskU2VydmljZUlEXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCiMgLS0tCiAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDUsCiAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDYwLAogICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAxMCwKICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gODAsCiAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDE1LAogICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwKICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gMSwKICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU0xBSUQsCiAgICAiU0xBICRTTEFJRCBoYXMgYmVlbiBjcmVhdGVkLiIsCik7Cgpmb3IgbXkgJEl0ZW0gKCAxIC4uIDUgKSB7CgogICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IE9uZSBUaXRsZScsCiAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICBDdXN0b21lcklEICAgPT4gJFRlc3RVc2VyQ3VzdG9tZXIsCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0VXNlckN1c3RvbWVyLAogICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEIiwKICAgICk7CgogICAgbXkgJFRlc3RGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICk7CgogICAgJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnLAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICdJdGVtMScsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoIDIgKiAkSXRlbSAqIDYwICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgICAgICBTdGF0ZUlEICAgICAgICAgICAgPT4gNCwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJUaWNrZXRTdGF0ZVNldCgpIHN1Y2Nlc3NmdWwgc2V0IHN0YXRlICdvcGVuJyBmb3IgdGlja2V0ICRUaWNrZXRJRCIsCiAgICApOwoKICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICdDdXN0b21lciBBIDxjdXN0b21lci1hQGV4YW1wbGUuY29tPicsCiAgICAgICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgICAgICBSZXBseVRvICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdzb21lIHNob3J0IGRlc2NyaXB0aW9uJywKICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCBQZXJsIG1vZHVsZXMgcHJvdmlkZSBhIHJhbmdlIG9mJywKICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ093bmVyVXBkYXRlJywKICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIE5vQWdlbnROb3RpZnkgICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoICRBcnRpY2xlSUQsICJBcnRpY2xlQ3JlYXRlKCkgQ3JlYXRlZCBhcnRpY2xlICRBcnRpY2xlSUQiICk7CgogICAgJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcyggJEl0ZW0gKiA2MCApOwoKICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICAgICAgU3RhdGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlRpY2tldFN0YXRlU2V0KCkgc3VjY2Vzc2Z1bCBzZXQgc3RhdGUgJ2Nsb3NlIHN1Y2Nlc3NmdWwnIGZvciB0aWNrZXQgJFRpY2tldElEIiwKICAgICk7Cgp9CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25BdmVyYWdlQWxsT3ZlcicsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnOSBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NaW5UaW1lQWxsT3ZlcicsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMyBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NYXhUaW1lQWxsT3ZlcicsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMTUgbScsCiAgICB9LAogICAgewogICAgICAgIEtpbmRzT2ZSZXBvcnRpbmcgPT4gJ1NvbHV0aW9uQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnOSBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NaW5UaW1lJywKICAgICAgICBFeHBlY3RlZFJlc3VsdCAgID0+ICczIG0nLAogICAgfSwKICAgIHsKICAgICAgICBLaW5kc09mUmVwb3J0aW5nID0+ICdTb2x1dGlvbk1heFRpbWUnLAogICAgICAgIEV4cGVjdGVkUmVzdWx0ICAgPT4gJzE1IG0nLAogICAgfSwKICAgIHsKICAgICAgICBLaW5kc09mUmVwb3J0aW5nID0+ICdTb2x1dGlvbldvcmtpbmdUaW1lQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnOSBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NaW5Xb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMyBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NYXhXb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMTUgbScsCiAgICB9LAogICAgewogICAgICAgIEtpbmRzT2ZSZXBvcnRpbmcgPT4gJ051bWJlck9mVGlja2V0cycsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnNScsCiAgICB9LAogICAgewogICAgICAgIEtpbmRzT2ZSZXBvcnRpbmcgPT4gJ1Jlc3BvbnNlQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnNiBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnUmVzcG9uc2VNaW5UaW1lJywKICAgICAgICBFeHBlY3RlZFJlc3VsdCAgID0+ICcyIG0nLAogICAgfSwKICAgIHsKICAgICAgICBLaW5kc09mUmVwb3J0aW5nID0+ICdSZXNwb25zZVdvcmtpbmdUaW1lQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnNiBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnUmVzcG9uc2VNaW5Xb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMiBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnUmVzcG9uc2VNYXhXb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMTAgbScsCiAgICB9LAopOwoKbXkgJFRpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRTb2x1dGlvblJlc3BvbnNlVGltZScpOwoKIyBDaGVjayBHZXRTdGF0RWxlbWVudCgpLgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgZm9yIG15ICRJdGVtIChxdyhJdGVtMSBJdGVtMikpIHsKCiAgICAgICAgbXkgJFJlc3VsdCA9ICRUaWNrZXRTb2x1dGlvblJlc3BvbnNlVGltZU9iamVjdC0+R2V0U3RhdEVsZW1lbnQoCiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgICAgICAgICAgICAgID0+IFskU2VydmljZUlEXSwKICAgICAgICAgICAgS2luZHNPZlJlcG9ydGluZyAgICAgICAgICAgICAgICAgPT4gWyAkVGVzdC0+e0tpbmRzT2ZSZXBvcnRpbmd9IF0sCiAgICAgICAgICAgICJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZE5hbWUiID0+IFskSXRlbV0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0OwogICAgICAgIGlmICggJEl0ZW0gZXEgJ0l0ZW0yJyApIHsKICAgICAgICAgICAgJEV4cGVjdGVkUmVzdWx0ID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdCA9ICRUZXN0LT57RXhwZWN0ZWRSZXN1bHR9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAkRXhwZWN0ZWRSZXN1bHQsCiAgICAgICAgICAgICIkVGVzdC0+e0tpbmRzT2ZSZXBvcnRpbmd9IGlzIGNhbGN1bGF0ZWQgd2VsbCAtICRSZXN1bHQiLAogICAgICAgICk7CiAgICB9Cgp9CgojIENsZWFudXAgY2FjaGUuCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCk7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiNWFhNGI2YWVmNDY1MjhlNmNkZGUyZWJjYjFkMDcyMjU3ZWM2YTM2IC0gc2NyaXB0cy90ZXN0L1RpY2tldC9UaWNrZXRBQ0wudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJENvbmZpZ09iamVjdCAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkVXNlck9iamVjdCAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwpteSAkU2VydmljZU9iamVjdCAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRRdWV1ZU9iamVjdCAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7Cm15ICRUeXBlT2JqZWN0ICAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKbXkgJFByaW9yaXR5T2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKTsKbXkgJFNMQU9iamVjdCAgICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRTdGF0ZU9iamVjdCAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyk7Cm15ICREeW5hbWljRmllbGRPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwpteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKbXkgJFN0b3JhYmxlT2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlICA9PiAxLAogICAgICAgIFVzZVRtcEFydGljbGVEaXIgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBzZXQgdmFsaWQgb3B0aW9ucwpteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwolVmFsaWRMaXN0ID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKIyBzZXQgdXNlciBvcHRpb25zCm15ICRVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCikgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCik7Cm15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwpteSAkTmV3VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWydhZG1pbiddLAopIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCm15ICROZXdVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkTmV3VXNlckxvZ2luLAopOwpteSAlTmV3VXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICBVc2VySUQgPT4gJE5ld1VzZXJJRCwKKTsKCiMgc2V0IGN1c3RvbWVyIHVzZXIgb3B0aW9ucwpteSAkQ3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCkKICAgIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCBjdXN0b21lciB1c2VyIjsKCm15ICVDdXN0b21lclVzZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgIFVzZXIgPT4gJEN1c3RvbWVyVXNlckxvZ2luLAopOwoKbXkgJE5ld0N1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgpteSAlTmV3Q3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICBVc2VyID0+ICROZXdDdXN0b21lclVzZXJMb2dpbiwKKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIHNldCBxdWV1ZSBvcHRpb25zCm15ICRRdWV1ZU5hbWUgPSAnUXVldWVfJyAuICRSYW5kb21JRDsKbXkgJFF1ZXVlSUQgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICBOYW1lICAgICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgIFZhbGlkSUQgICAgICAgICA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFF1ZXVlSUQsCiAgICAiUXVldWVBZGQoKSBJRCAoJFF1ZXVlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdRdWV1ZU5hbWUgPSAnTmV3UXVldWVfJyAuICRSYW5kb21JRDsKbXkgJE5ld1F1ZXVlSUQgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICBOYW1lICAgICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgIFZhbGlkSUQgICAgICAgICA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1F1ZXVlSUQsCiAgICAiUXVldWVBZGQoKSBJRCAoJE5ld1F1ZXVlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTZXJ2aWNlVHlwZUxpc3QgfTsKCiMgZ2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTTEFUeXBlTGlzdCB9OwojIC0tLQoKIyBzZXQgc2VydmljZSBvcHRpb25zCm15ICRTZXJ2aWNlTmFtZSA9ICdTZXJ2aWNlXycgLiAkUmFuZG9tSUQ7Cm15ICRTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgSUQgKCRTZXJ2aWNlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdTZXJ2aWNlTmFtZSA9ICdOZXdTZXJ2aWNlXycgLiAkUmFuZG9tSUQ7Cm15ICROZXdTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAkTmV3U2VydmljZU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1NlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgSUQgKCROZXdTZXJ2aWNlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgc2V0IHR5cGUgb3B0aW9ucwpteSAkVHlwZU5hbWUgPSAnVHlwZV8nIC4gJFJhbmRvbUlEOwpteSAkVHlwZUlEICAgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJFR5cGVOYW1lLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlELAogICAgIlR5cGVBZGQoKSBJRCAoJFR5cGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1R5cGVOYW1lID0gJ05ld1R5cGVfJyAuICRSYW5kb21JRDsKbXkgJE5ld1R5cGVJRCAgID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICROZXdUeXBlTmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1R5cGVJRCwKICAgICJUeXBlQWRkKCkgSUQgKCROZXdUeXBlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgc2V0IHByaW9yaXR5IG9wdGlvbnMKbXkgJFByaW9yaXR5TmFtZSA9ICdQcmlvcml0eV8nIC4gJFJhbmRvbUlEOwpteSAkUHJpb3JpdHlJRCAgID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJFByaW9yaXR5TmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFByaW9yaXR5SUQsCiAgICAiUHJpb3JpdHlBZGQoKSBJRCAoJFByaW9yaXR5SUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdQcmlvcml0eU5hbWUgPSAnTmV3UHJpb3JpdHlfJyAuICRSYW5kb21JRDsKbXkgJE5ld1ByaW9yaXR5SUQgICA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlBZGQoCiAgICBOYW1lICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdQcmlvcml0eUlELAogICAgIlByaW9yaXR5QWRkKCkgSUQgKCROZXdQcmlvcml0eUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgojIHNldCBTTEEgb3B0aW9ucwpteSAkU0xBTmFtZSA9ICdTTEFfJyAuICRSYW5kb21JRDsKbXkgJFNMQUlEICAgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICBOYW1lICAgID0+ICRTTEFOYW1lLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKIyAtLS0KICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNMQUlELAogICAgIlNMQUFkZCgpIElEICgkU0xBSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCm15ICROZXdTTEFOYW1lID0gJ05ld1NMQV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3U0xBSUQgICA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1NMQU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAojIC0tLQogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3U0xBSUQsCiAgICAiU0xBQWRkKCkgSUQgKCROZXdTTEFJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBzZXQgc3RhdGUgb3B0aW9ucwpteSAkU3RhdGVOYW1lID0gJ1N0YXRlXycgLiAkUmFuZG9tSUQ7Cm15ICRTdGF0ZUlEICAgPSAkU3RhdGVPYmplY3QtPlN0YXRlQWRkKAogICAgTmFtZSAgICA9PiAkU3RhdGVOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVHlwZUlEICA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIElEICgkU3RhdGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1N0YXRlTmFtZSA9ICdOZXdTdGF0ZV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3U3RhdGVJRCAgID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFR5cGVJRCAgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1N0YXRlSUQsCiAgICAiU3RhdGVBZGQoKSBJRCAoJE5ld1N0YXRlSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgQ3JlYXRlIHRlc3QgdGlja2V0IGR5bmFtaWMgZmllbGRzLgpteSBARHluYW1pY0ZpZWxkTmFtZXM7CmZvciBteSAkQ291bnQgKCAxIC4uIDIgKSB7CiAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICdEeW5hbWljRmllbGQnIC4gJENvdW50IC4gJFJhbmRvbUlEOwogICAgbXkgJER5bmFtaWNGaWVsZElEICAgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgTmFtZSAgICAgICA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICAgICBMYWJlbCAgICAgID0+ICdhIGRlc2NyaXB0aW9uJywKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTk5LAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnRGVmYXVsdCcsCiAgICAgICAgfSwKICAgICAgICBSZW9yZGVyID0+IDAsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgIkR5bmFtaWNGaWVsZEFkZCgpIElEICgkRHluYW1pY0ZpZWxkSUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKICAgICk7CgogICAgcHVzaCBARHluYW1pY0ZpZWxkTmFtZXMsICREeW5hbWljRmllbGROYW1lOwp9CgojIFRPRE8gaW50ZWdyYXRlIHRoaXMgdGVzdHMgd2l0aCBkYXRhYmFzZSB0ZXN0cwojIHNldCB0ZXN0aW5nIEFDTHMgb3B0aW9ucwpteSAlVGVzdEFDTHMgPSAoCiAgICAnUXVldWUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1NlcnZpY2UtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdUeXBlLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskVHlwZU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdDdXN0b21lclVzZXItMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskQ3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnUHJpb3JpdHktMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnU0xBLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTTEFOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1N0YXRlLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ093bmVyLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1Jlc3BvbnNpYmxlLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ0Zyb250ZW5kLTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgRnJvbnRlbmQgPT4gewogICAgICAgICAgICAgICAgQWN0aW9uID0+IFsgJ0FnZW50VGlja2V0UGhvbmUnLCAnQWdlbnRUaWNrZXRFbWFpbCcgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1RpY2tldC0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIEFjdGlvbiA9PiBbICdBZ2VudFRpY2tldFBob25lJywgJ0FnZW50VGlja2V0Qm91bmNlJywgXSwKICAgICAgICB9LAogICAgfSwKICAgICdEeW5hbWljRmllbGQtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX0ZpZWxkMSA9PiBbJ0l0ZW0xJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdEeW5hbWljRmllbGQtMicgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX0ZpZWxkMiA9PiBbJzAnXSwgICAgIyB6ZXJvLXZhbHVlLCBzZWUgYnVnIzEyMjczCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKKTsKCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdUaWNrZXRBY2wnLAogICAgVmFsdWUgPT4gXCVUZXN0QUNMcywKKTsKCm15ICRHb3RBQ0xzID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBY2wnKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5Jc0RlZXBseSgKICAgICRHb3RBQ0xzLAogICAgXCVUZXN0QUNMcywKICAgICJBQ0xzIFNldCBhbmQgR2V0IGZyb20gc3lzY29uZmlnIiwKKTsKCm15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgojIHNldCB0aWNrZXQgb3B0aW9ucwpteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgID0+ICdTb21lIFRpY2tldCBUaXRsZScsCiAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICBTZXJ2aWNlICAgICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgIFR5cGUgICAgICAgICAgPT4gJFR5cGVOYW1lLAogICAgTG9jayAgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICAgPT4gJFByaW9yaXR5TmFtZSwKICAgIFNMQSAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICBTdGF0ZSAgICAgICAgID0+ICRTdGF0ZU5hbWUsCiAgICBDdXN0b21lcklEICAgID0+ICcxMjM0NjUnLAogICAgQ3VzdG9tZXJVc2VyICA9PiAkQ3VzdG9tZXJVc2VyTG9naW4sCiAgICBPd25lcklEICAgICAgID0+ICRVc2VySUQsCiAgICBSZXNwb25zaWJsZUlEID0+ICRVc2VySUQsCiAgICBVc2VySUQgICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRCwKICAgICJUaWNrZXRDcmVhdGUoKSBJRCAoJFRpY2tldElEKSBjcmVhdGVkIHN1Y2Nlc3NmdWxseSIsCik7CgojIFNldCB0aGUgdGVzdCB0aWNrZXQgZHluYW1pYyBmaWVsZCB2YWx1ZXMuCmZvciBteSAkQ291bnQgKCAwIC4uIDEgKSB7CiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRDb3VudCA9PSAwICkgewogICAgICAgICRWYWx1ZSA9ICdJdGVtMSc7CiAgICB9CiAgICBlbHNpZiAoICRDb3VudCA9PSAxICkgewogICAgICAgICRWYWx1ZSA9ICcwJzsKICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5hbWVzWyRDb3VudF0sCiAgICApOwogICAgbXkgJER5bmFtaWNGaWVsZFZhbHVlU2V0U3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRVc2VySUQsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREeW5hbWljRmllbGRWYWx1ZVNldFN1Y2Nlc3MsCiAgICAgICAgIkR5bmFtaWNGaWVsZCBWYWx1ZVNldCgpIGZvciBEeW5hbWljRmllbGQgSUQgKCREeW5hbWljRmllbGROYW1lc1skQ291bnRdKSwgVGlja2V0IElEICgkVGlja2V0SUQpIHNldCBzdWNjZXNzZnVsbHkiLAogICAgKTsKfQoKIyBkZWZpbmUgZm9ybSB1cGRhdGUgYmFzZWQgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyBRdWV1ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBRdWV1ZS0xIC0gd3JvbmcgcmV0dXJuIHR5cGUgKEFjdGlvbiknLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdXcm9uZycsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAwLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyByZXR1cm4gdHlwZSAoTm9uIEFjdGlvbiknLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdXcm9uZycsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyByZXR1cm4gc3ViIHR5cGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdXcm9uZycsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBRdWV1ZS0xIC0gY29ycmVjdCBRdWV1ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSBjb3JyZWN0IFF1ZXVlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU2VydmljZS0xIC0gY29ycmVjdCBTZXJ2aWNlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFNlcnZpY2UtMSAtIGNvcnJlY3QgU2VydmljZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBUeXBlLTEgLSBjb3JyZWN0IFR5cGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICRUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBUeXBlLTEgLSBjb3JyZWN0IFR5cGVJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBDdXN0b21lclVzZXItMSAtIGNvcnJlY3QgQ3VzdG9tZXJVc2VyJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBQcmlvcml0eS0xIC0gY29ycmVjdCBQcmlvcml0eScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJFByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBQcmlvcml0eS0xIC0gY29ycmVjdCBQcmlvcml0eUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTTEEtMSAtIGNvcnJlY3QgU0xBJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICRTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFNMQS0xIC0gY29ycmVjdCBTTEFJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU3RhdGUtMSAtIGNvcnJlY3QgU3RhdGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICRTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU3RhdGUtMSAtIGNvcnJlY3QgU3RhdGVJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgT3duZXItMSAtIGNvcnJlY3QgT3duZXInLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJFVzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgT3duZXItMSAtIGNvcnJlY3QgT3duZXJJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUmVzcG9uc2libGUtMSAtIGNvcnJlY3QgUmVzcG9uc2libGUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJFVzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBSZXNwb25zaWJsZS0xIC0gY29ycmVjdCBSZXNwb25zaWJsZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkVXNlcklELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgRnJvbnRlbmQtMSAtIGNvcnJlY3QgQWN0aW9uJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJ0FnZW50VGlja2V0UGhvbmUnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFRpY2tldC0xIC0gY29ycmVjdCBUaWNrZXQgdXNpbmcgQWN0aW9uJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICctJywKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4gewogICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBUaWNrZXQtMSAtIGNvcnJlY3QgVGlja2V0IHVzaW5nIERhdGEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgICAgICAyID0+ICdBZ2VudFRpY2tldEJvdW5jZScsCiAgICAgICAgICAgICAgICAzID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHsKICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIDIgPT4gJ0FnZW50VGlja2V0Qm91bmNlJywKICAgICAgICB9LAogICAgfSwKCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgRHluYW1pY0ZpZWxkLTEgLSBjb3JyZWN0IER5bmFtaWNGaWVsZCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX0ZpZWxkMSA9PiBbJ0l0ZW0xJ10KICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBEeW5hbWljRmllbGQtMiAtIER5bmFtaWNGaWVsZCB3aXRoIHplcm8gdmFsdWUnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZF9GaWVsZDIgPT4gWycwJ10sICAgICMgemVyby12YWx1ZSwgc2VlIGJ1ZyMxMjI3MwogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgIG15ICRDb25maWcgICAgID0gJFRlc3QtPntDb25maWd9OwogICAgbXkgJEFDTFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgaWYgKCAhJFRlc3QtPntTdWNjZXNzTWF0Y2h9ICkgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJEFDTFN1Y2Nlc3MsCiAgICAgICAgICAgICIkVGVzdC0+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+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJE5ld0N1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUN1c3RvbWVyVXNlci0xIC0gU2V0IG5ldyBDdXN0b21lclVzZXIsIFdyb25nIFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1DdXN0b21lclVzZXItMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkTmV3Q3VzdG9tZXJVc2VyRGF0YXtVc2VySUR9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItQ3VzdG9tZXJVc2VyLTEgLSBTZXQgbmV3IEN1c3RvbWVyVXNlciwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItQ3VzdG9tZXJVc2VyLTEtUycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3Q3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJE5ld0N1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgcHJpb3JpdHkgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUHJpb3JpdHktMSAtIFNlbnQgbmV3IHByaW9yaXR5LCBXcm9uZyBQcm9wZXJ0aWVzOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUHJpb3JpdHktMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Qcmlvcml0eS0xIC0gU2VudCBuZXcgcHJpb3JpdHksIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUHJpb3JpdHktMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVByaW9yaXR5LTEgLSBTZW50IG5ldyBwcmlvcml0eSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVByaW9yaXR5LTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVByaW9yaXR5LTEgLSBTZW50IG5ldyBwcmlvcml0eSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUHJpb3JpdHktMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBzbGEgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU0xBLTEgLSBTZW50IG5ldyBTTEEsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNMQS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1NMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gJE5ld1NMQU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNMQS0xIC0gU2VudCBuZXcgU0xBLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNMQS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU0xBICAgICAgICAgICA9PiAkTmV3U0xBTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNMQS0xIC0gU2VudCBuZXcgU0xBLCBXcm9uZyBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNMQS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gJE5ld1NMQU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVNMQS0xIC0gU2VudCBuZXcgU0xBLCBDb3JyZWN0IFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TTEEtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICROZXdTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgc3RhdGUgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU3RhdGUtMSAtIFNlbnQgbmV3IHN0YXRlLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TdGF0ZS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVN0YXRlLTEgLSBTZW50IG5ldyBzdGF0ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVN0YXRlLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnSnVuayddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU3RhdGUtMSAtIFNlbnQgbmV3IHN0YXRlLCBXcm9uZyBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU3RhdGUtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU3RhdGUtMSAtIFNlbnQgbmV3IHN0YXRlLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVN0YXRlLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBvd25lciBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Pd25lci0xIC0gU2VudCBuZXcgb3duZXIsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLU93bmVyLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgT3duZXIgICAgICAgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Pd25lci0xIC0gU2VudCBuZXcgb3duZXIsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItT3duZXItMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ2Nsb3NlZCddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIE93bmVyICAgICAgICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItT3duZXItMSAtIFNlbnQgbmV3IG93bmVyLCBXcm9uZyBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLU93bmVyLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgT3duZXIgICAgICAgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Pd25lci0xIC0gU2VudCBuZXcgb3duZXIsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLU93bmVyLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgT3duZXIgICAgICAgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHJlc3BvbnNpYmxlIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVJlc3BvbnNpYmxlLTEgLSBTZW50IG5ldyByZXNwb25zaWJsZSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUmVzcG9uc2libGUtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBSZXNwb25zaWJsZSAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVJlc3BvbnNpYmxlLTEgLSBTZW50IG5ldyByZXNwb25zaWJsZSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1SZXNwb25zaWJsZS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnY2xvc2VkJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUmVzcG9uc2libGUtMSAtIFNlbnQgbmV3IHJlc3BvbnNpYmxlLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUmVzcG9uc2libGUtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBSZXNwb25zaWJsZSAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVJlc3BvbnNpYmxlLTEgLSBTZW50IG5ldyByZXNwb25zaWJsZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1SZXNwb25zaWJsZS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIGZyb250ZW5kIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUZyb250ZW5kLTEgLSBjb3JyZWN0IEFjdGlvbjogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUZyb250ZW5kLTEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRnJvbnRlbmQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWyAnQWdlbnRUaWNrZXRQaG9uZScsICdBZ2VudFRpY2tldEVtYWlsJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRpY2tldCBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UaWNrZXQtMSAtIFNlbnQgbmV3IHBhcmFtcywgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlIDonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVGlja2V0LTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJE5ld1F1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskTmV3UHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyROZXdTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbJ0FnZW50VGlja2V0Q29tcG9zZSddLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCgogICAgICAgICMgQWN0aW9uIEFDTCBhbHdheXMgcmV0dXJuIGZhbHNlCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAwLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UaWNrZXQtMSAtIFNlbnQgbmV3IHBhcmFtcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UaWNrZXQtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+IFsgJ0FnZW50VGlja2V0Q2xvc2UnLCAnQWdlbnRUaWNrZXRCb3VuY2UnLCBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCgogICAgICAgICMgQWN0aW9uIEFDTCBhbHdheXMgcmV0dXJuIGZhbHNlCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4gewogICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldENsb3NlJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVGlja2V0LTEgLSBTZW50IG5ldyBwYXJhbXMsIFdyb25nIFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVRpY2tldC0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+IFsnQWdlbnRUaWNrZXRDb21wb3NlJ10sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldENsb3NlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDAsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVRpY2tldC0yIC0gU2VudCBuZXcgcGFyYW1zLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UaWNrZXQtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJE5ld1F1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskTmV3UHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyROZXdTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSAgICA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbJ0FnZW50VGlja2V0Q29tcG9zZSddLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCgogICAgICAgICMgQWN0aW9uIEFDTCBhbHdheXMgcmV0dXJuIGZhbHNlCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4ge30KICAgIH0sCgogICAgIyBkeW5hbWljIGZpZWxkcyBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1EeW5hbWljRmllbGQtMSAtIFNlbnQgbmV3IGR5bmFtaWMgZmllbGQgdmFsdWUsJwogICAgICAgICAgICAuICcgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRHluYW1pY0ZpZWxkLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0yJ10KICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1EeW5hbWljRmllbGQtMSAtIFNlbnQgbmV3IGR5bmFtaWMgZmllbGQgdmFsdWUsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1EeW5hbWljRmllbGQtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0xJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkICA9PiB7CiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0xJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0xJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTInXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRHluYW1pY0ZpZWxkLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTInXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkICA9PiB7CiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItRHluYW1pY0ZpZWxkIC0gcmVzdHJpY3QgYWN0aW9uJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWydBZ2VudFRpY2tldENsb3NlJ10sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFByaW50JywKICAgICAgICAgICAgICAgIDIgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMSwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHsKICAgICAgICAgICAgMSA9PiAnQWdlbnRUaWNrZXRQcmludCcsCiAgICAgICAgICAgIH0KICAgIH0sCgogICAgIyB1c2VyIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsnMiBsb3cnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIFdyb25nIFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJzIgbG93J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIENvcnJlY3QgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAopOwoKIyBHZXQgcm9sZSBvYmplY3QuCm15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKIyBBZGQgc29tZSByb2xlcwpteSAkUm9sZUlEMSA9ICRHcm91cE9iamVjdC0+Um9sZUFkZCgKICAgIE5hbWUgICAgPT4gInVuaXR0ZXN0MS0kUmFuZG9tSUQiLAogICAgQ29tbWVudCA9PiAnY29tbWVudCBkZXNjcmliaW5nIHRoZSByb2xlJywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPklzTm90KAogICAgJFJvbGVJRDEsCiAgICB1bmRlZiwKICAgICJSb2xlQWRkKCkgLSBSb2xlSUQxIiwKKTsKbXkgJFJvbGVJRDIgPSAkR3JvdXBPYmplY3QtPlJvbGVBZGQoCiAgICBOYW1lICAgID0+ICJ1bml0dGVzdDItJFJhbmRvbUlEIiwKICAgIENvbW1lbnQgPT4gJ2NvbW1lbnQgZGVzY3JpYmluZyB0aGUgcm9sZScsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5Jc05vdCgKICAgICRSb2xlSUQyLAogICAgdW5kZWYsCiAgICAiUm9sZUFkZCgpIC0gUm9sZUlEMiIsCik7CgpteSAkUmVtb3ZlUm9sZXMgPSBzdWIgewoKICAgIGZvciBteSAkUm9sZUlEICggJFJvbGVJRDEsICRSb2xlSUQyICkgewogICAgICAgIG15ICRTdWNjZXNzID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uUm9sZVVzZXJBZGQoCiAgICAgICAgICAgIFVJRCAgICA9PiAkVXNlcklELAogICAgICAgICAgICBSSUQgICAgPT4gJFJvbGVJRCwKICAgICAgICAgICAgQWN0aXZlID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGVzdCB1c2VyIHJlbW92ZWQgZnJvbSBSb2xlICRSb2xlSUQiLAogICAgICAgICk7CiAgICB9Cn07CgpteSAkRXhlY3V0ZVRlc3RzID0gc3ViIHsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgbXkgQFRlc3RzID0gQHsgJFBhcmFte1Rlc3RzfSB9OwoKICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICMgY2xlYW4gcHJldmlvdXMgZGF0YQogICAgICAgICRUaWNrZXRPYmplY3QtPntUaWNrZXRBY2xEYXRhfSA9IHt9OwoKICAgICAgICBpZiAoICRUZXN0LT57QWRkUm9sZXN9ICkgewogICAgICAgICAgICAkUmVtb3ZlUm9sZXMtPigpOwogICAgICAgICAgICBmb3IgbXkgJFJvbGVJRCAoIEB7ICRUZXN0LT57QWRkUm9sZXN9IH0gKSB7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRHcm91cE9iamVjdC0+UGVybWlzc2lvblJvbGVVc2VyQWRkKAogICAgICAgICAgICAgICAgICAgIFVJRCAgICA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgICAgIFJJRCAgICA9PiAkUm9sZUlELAogICAgICAgICAgICAgICAgICAgIEFjdGl2ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgICAgICJUZXN0IHVzZXIgYWRkZWQgdG8gUm9sZSAkUm9sZUlEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldEFjbCcsCiAgICAgICAgICAgIFZhbHVlID0+ICRUZXN0LT57QUNMc30sCiAgICAgICAgKTsKCiAgICAgICAgJEdvdEFDTHMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFjbCcpOwoKICAgICAgICAjIHNhbml0eSBjaGVjawogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJEdvdEFDTHMsCiAgICAgICAgICAgICRUZXN0LT57QUNMc30sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTHMgU2V0IGFuZCBHZXQgZnJvbSBzeXNjb25maWciLAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWcgICAgID0gJFRlc3QtPntDb25maWd9OwogICAgICAgIG15ICRBQ0xTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKCAleyAkVGVzdC0+e0NvbmZpZ30gfSApOwoKICAgICAgICAjIGdldCB0aGUgZGF0YSBmcm9tIEFDTAogICAgICAgIG15ICVBQ0xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwoKICAgICAgICBpZiAoICEkVGVzdC0+e1N1Y2Nlc3NNYXRjaH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRBQ0xTdWNjZXNzLAogICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gRXhlY3V0ZWQgd2l0aCBGYWxzZSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICBcJUFDTERhdGEsCiAgICAgICAgICAgICAgICB7fSwKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTCBkYXRhIG11c3QgYmUgZW1wdHkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgIGlmICggJFRlc3QtPntDb25maWd9LT57UmV0dXJuVHlwZX0gZXEgJ0FjdGlvbicgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGFjdGlvbiBkYXRhIGZyb20gQUNMCiAgICAgICAgICAgICAgICAjIEFjdGlvbiBBQ0wgYWx3YXlzIHJldHVybiBmYWxzZQogICAgICAgICAgICAgICAgbXkgJUFDTEFjdGlvbkRhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xBY3Rpb25EYXRhKCk7CgogICAgICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgICAgIFwlQUNMQWN0aW9uRGF0YSwKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1JldHVybkFjdGlvbkRhdGF9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTCBhY3Rpb24gZGF0YSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJEFDTFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gRXhlY3V0ZWQgd2l0aCBUcnVlIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgICAgIFwlQUNMRGF0YSwKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1JldHVybkRhdGF9LAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTCBkYXRhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2xlYW4gQUNMcwogICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldEFjbCcsCiAgICAgICAgICAgIFZhbHVlID0+IHt9LAogICAgICAgICk7CgogICAgICAgICRHb3RBQ0xzID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBY2wnKTsKCiAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRHb3RBQ0xzLAogICAgICAgICAgICB7fSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gQUNMcyBhcmUgY2xlYW4iLAogICAgICAgICk7CgogICAgICAgIGlmICggJFRlc3QtPntBZGRSb2xlc30gKSB7CiAgICAgICAgICAgICRSZW1vdmVSb2xlcy0+KCk7CiAgICAgICAgfQogICAgfQp9OwokRXhlY3V0ZVRlc3RzLT4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCiMgc3BlY2lhbCB0ZXN0cwpAVGVzdHMgPSAoCgogICAgIyBQcm9wZXJ0aWVzIE5vdAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RdOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90XVJhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90XSBOZWdhdGVkIFF1ZXVlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90XVJhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RdIGluIGFuIEFycmF5OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyAnW05vdF1SYXcnLCAnW05vdF1Qb3N0bWFzdGVyJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIFByb3BlcnRpZXMgTm90UmVnRXhwCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdFJlZ0V4cF06JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RSZWdFeHBdSFcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdFJlZ0V4cF0gTmVnYXRlZCBRdWV1ZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdFJlZ0V4cF1hdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RSZWdFeHBdIGluIGFuIEFycmF5OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyAnW05vdFJlZ0V4cF1hdycsICdbTm90UmVnRXhwXW1hc3RlcicgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9wZXJ0aWVzIE5vdHJlZ2V4cAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RyZWdleHBdOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90cmVnZXhwXUhXJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RyZWdleHBdIE5lZ2F0ZWQgUXVldWU6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RyZWdleHBdcmEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90cmVnZXhwXSBpbiBhbiBBcnJheTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsgJ1tOb3RyZWdleHBdcmEnLCAnW05vdHJlZ2V4cF1tYXN0ZXInIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgY29tYmluYXRpb24gcG9zc2libGUsIHBvc3NpYmxlIG5vdAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlL1Bvc3NpYmxlTm90OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZS9Qb3NzaWJsZU5vdCBKb2luOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlTm90IG9ubHk6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIFBvc3NpYmxlL1Bvc3NpYmxlQWRkOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEQi1Vc2VyLTEtRScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlQWRkID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICc0IGhpZ2gnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVVzZXItMSAtIFBvc3NpYmxlL1Bvc3NpYmxlQWRkL1Bvc3NpYmxlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEQi1Vc2VyLTEtRScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlQWRkID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICc0IGhpZ2gnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnREItVXNlci0xLUYnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnNCBoaWdoJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZU5vdC9Qb3NzaWJsZUFkZDonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkxJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGVOb3QvUG9zc2libGU6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkyJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlL1Bvc3NpYmxlQWRkL1Bvc3NpYmxlTm90OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkyJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlQWRkID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsICczIG1lZGl1bScsICc0IGhpZ2gnIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICB9LAogICAgfSwKKTsKJFNlbGYtPlRydWUoCiAgICAxLAogICAgIi0tLSBTdGFydCBTcGVjaWFsIEFDTCBUZXN0cyAtLS0iLAopOwokRXhlY3V0ZVRlc3RzLT4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCiMgQXJyYXkgbWF0Y2ggdGVzdHMKbXkgQFRlc3RzTm9ybWFsID0gKAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSBObyByb2xlcyBjaGVjayB1bml0dGVzdDEnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbInVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAxIHJvbGUgKHdyb25nKSBjaGVjayB1bml0dGVzdDEnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbInVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFskUm9sZUlEMl0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMSByb2xlIGNoZWNrIHVuaXR0ZXN0MScsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsidW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyRSb2xlSUQxXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIHVuaXR0ZXN0MScsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsidW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyAkUm9sZUlEMSwgJFJvbGVJRDIgXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIHVuaXR0ZXN0MicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsidW5pdHRlc3QyLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyAkUm9sZUlEMSwgJFJvbGVJRDIgXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAopOwoKbXkgJVRlc3RNb2RpZmllcnMgPSAoCiAgICBSZWdFeHAgPT4gWwogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIE5vIHJvbGVzIGNoZWNrIFtSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSAod3JvbmcpIGNoZWNrIFtSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAxIHJvbGUgY2hlY2sgW1JlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW1JlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbUmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbUmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtSZWdFeHBddW5pdHRlc3QyJywKICAgICAgICAgICAgUm9sZSA9PiBbIltSZWdFeHBddW5pdHRlc3QyIl0KICAgICAgICB9CiAgICBdLAogICAgcmVnZXhwID0+IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSBObyByb2xlcyBjaGVjayBbcmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbcmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAxIHJvbGUgKHdyb25nKSBjaGVjayBbcmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbcmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMSByb2xlIGNoZWNrIFtyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW3JlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW3JlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbcmVnZXhwXXVuaXR0ZXN0MicsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbcmVnZXhwXXVuaXR0ZXN0MiJdCiAgICAgICAgfSwKICAgICAgICBdCik7CgpteSAkTnVtYmVyT2ZUZXN0cyA9ICQjVGVzdHNOb3JtYWw7Cgpmb3IgbXkgJFRlc3RDYXNlICggc29ydCBrZXlzICVUZXN0TW9kaWZpZXJzICkgewogICAgZm9yIG15ICRJbmRleCAoIDAgLi4gJE51bWJlck9mVGVzdHMgKSB7CgogICAgICAgIG15ICRUZXN0ID0gJFN0b3JhYmxlT2JqZWN0LT5DbG9uZSggRGF0YSA9PiAkVGVzdHNOb3JtYWxbJEluZGV4XSApOwoKICAgICAgICAkVGVzdC0+e05hbWV9ID0gJFRlc3RNb2RpZmllcnN7JFRlc3RDYXNlfS0+WyRJbmRleF0tPntOYW1lfTsKICAgICAgICAkVGVzdC0+e0FDTHN9LT57J1JvbGUtVGVzdCd9LT57UHJvcGVydGllc30tPntVc2VyfS0+e1JvbGV9ID0gJFRlc3RNb2RpZmllcnN7JFRlc3RDYXNlfS0+WyRJbmRleF0tPntSb2xlfTsKCiAgICAgICAgcHVzaCBAVGVzdHNOb3JtYWwsICRUZXN0OwogICAgfQp9CgpteSBAVGVzdHNOb3QgPSAoCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIE5vIHJvbGVzIGNoZWNrIFtOb3RddW5pdHRlc3QxOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSAod3JvbmcpIGNoZWNrIFtOb3RddW5pdHRlc3QxOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbJFJvbGVJRDJdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSBjaGVjayBbTm90XXVuaXR0ZXN0MTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RddW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyRSb2xlSUQxXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdF11bml0dGVzdDE6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90XXVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFsgJFJvbGVJRDEsICRSb2xlSUQyIF0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtOb3RddW5pdHRlc3QyOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDItJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbICRSb2xlSUQxLCAkUm9sZUlEMiBdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKKTsKCiVUZXN0TW9kaWZpZXJzID0gKAogICAgUmVnRXhwID0+IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSBObyByb2xlcyBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAxIHJvbGUgKHdyb25nKSBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMSByb2xlIGNoZWNrIFtOb3RSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdFJlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdFJlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MicsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MiJdCiAgICAgICAgfQogICAgXSwKICAgIHJlZ2V4cCA9PiBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gTm8gcm9sZXMgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlICh3cm9uZykgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDEgcm9sZSBjaGVjayBbTm90cmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90cmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtOb3RyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDInLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDIiXQogICAgICAgIH0sCiAgICAgICAgXQopOwoKJE51bWJlck9mVGVzdHMgPSAkI1Rlc3RzTm90OwoKZm9yIG15ICRUZXN0Q2FzZSAoIHNvcnQga2V5cyAlVGVzdE1vZGlmaWVycyApIHsKICAgIGZvciBteSAkSW5kZXggKCAwIC4uICROdW1iZXJPZlRlc3RzICkgewoKICAgICAgICBteSAkVGVzdCA9IFN0b3JhYmxlOjpkY2xvbmUoICRUZXN0c05vdFskSW5kZXhdICk7CgogICAgICAgICRUZXN0LT57TmFtZX0gPSAkVGVzdE1vZGlmaWVyc3skVGVzdENhc2V9LT5bJEluZGV4XS0+e05hbWV9OwogICAgICAgICRUZXN0LT57QUNMc30tPnsnUm9sZS1UZXN0J30tPntQcm9wZXJ0aWVzfS0+e1VzZXJ9LT57Um9sZX0gPSAkVGVzdE1vZGlmaWVyc3skVGVzdENhc2V9LT5bJEluZGV4XS0+e1JvbGV9OwoKICAgICAgICBwdXNoIEBUZXN0c05vdCwgJFRlc3Q7CiAgICB9Cn0KCkBUZXN0cyA9ICggQFRlc3RzTm9ybWFsLCBAVGVzdHNOb3QgKTsKCiRTZWxmLT5UcnVlKAogICAgMSwKICAgICItLS0gU3RhcnQgQXJyYXkgbWF0Y2ggQUNMIFRlc3RzIC0tLSIsCik7CiRFeGVjdXRlVGVzdHMtPiggVGVzdHMgPT4gXEBUZXN0cyApOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA1MGVhZDNjZWExOGIwMmM5ZDhkNjU4MWZmYTAxNDQ4OThlZjlkMzE0IC0gc2NyaXB0cy90ZXN0L1RpY2tldC9UaWNrZXRTZXJ2aWNlTGlzdC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4Owp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRUeXBlT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCm15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKbXkgJFJhbmRvbSA9ICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpOwoKbXkgJFR5cGVJRDEgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RUeXBlMScgLiAkUmFuZG9tLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUeXBlSUQxLAogICAgJ1R5cGUgMSBjcmVhdGVkLicsCik7CgpteSAkVHlwZUlEMiA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFR5cGUyJyAuICRSYW5kb20sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFR5cGVJRDIsCiAgICAnVHlwZSAyIGNyZWF0ZWQuJywKKTsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7ICRTZXJ2aWNlVHlwZUxpc3QgfTsKIyAtLS0KCm15ICRTZXJ2aWNlSUQxID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZTEnIC4gJFJhbmRvbSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlSUQxLAogICAgJ1NlcnZpY2UgMSBjcmVhdGVkLicsCik7Cm15ICRTZXJ2aWNlSUQyID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U2VydmljZTInIC4gJFJhbmRvbSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlSUQyLAogICAgJ1NlcnZpY2UgMiBjcmVhdGVkLicsCik7CgpteSAkUXVldWVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJ1JhdycgKTsKCm15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGVzdCB0aWNrZXQgdGl0bGUgJyAuICRSYW5kb20sCiAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdFVzZXJMb2dpbiwKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRCwKICAgICdUaWNrZXQgY3JlYXRlZC4nLAopOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIE1pc3NpbmcgVXNlcklEIG9yIEN1c3RvbWVyVXNlcklEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1RpY2tldFNlcnZpY2VMaXN0KCkgLSBNaXNzaW5nIFRpY2tldElEIG9yIFF1ZXVlSUQnLAogICAgICAgIFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdUaWNrZXRTZXJ2aWNlTGlzdCgpIC0gVXNlcklEIGFuZCBUaWNrZXRJRCcsCiAgICAgICAgUGFyYW1zID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gewogICAgICAgICAgICAiJFNlcnZpY2VJRDEiID0+ICdUZXN0U2VydmljZTEnIC4gJFJhbmRvbSwKICAgICAgICAgICAgIiRTZXJ2aWNlSUQyIiA9PiAnVGVzdFNlcnZpY2UyJyAuICRSYW5kb20sCgogICAgICAgICAgICAjIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHNlcnZpY2VzIGFzIHdlbGwuLi4KICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1RpY2tldFNlcnZpY2VMaXN0KCkgLSBVc2VySUQgYW5kIFF1ZXVlSUQnLAogICAgICAgIFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IHsKICAgICAgICAgICAgIiRTZXJ2aWNlSUQxIiA9PiAnVGVzdFNlcnZpY2UxJyAuICRSYW5kb20sCiAgICAgICAgICAgICIkU2VydmljZUlEMiIgPT4gJ1Rlc3RTZXJ2aWNlMicgLiAkUmFuZG9tLAoKICAgICAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBvdGhlciBzZXJ2aWNlcyBhcyB3ZWxsLi4uCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdUaWNrZXRTZXJ2aWNlTGlzdCgpIC0gQ3VzdG9tZXJVc2VySUQgYW5kIFF1ZXVlSUQnLAogICAgICAgIFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IHsKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIEN1c3RvbWVyVXNlcklEIGFuZCBUaWNrZXRJRCcsCiAgICAgICAgUGFyYW1zID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IHsKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSAlTGlzdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlcnZpY2VMaXN0KAogICAgICAgICV7ICRUZXN0LT57UGFyYW1zfSB9LAogICAgKTsKCiAgICBpZiAoICRUZXN0LT57RXhwZWN0ZWRSZXN1bHR9ICkgewoKICAgICAgICAjIGlmICgkVGVzdC0+e1BhcmFtc30tPntVc2VySUR9KSB7CiAgICAgICAgIyBSZW1vdmUgYWxsIG90aGVyIHNlcnZpY2VzIHRoYXQgYXJlIG5vdCBjcmVhdGVkIGluIHRoaXMgdGVzdC4KICAgICAgICBteSBARmlsdGVyID0gZ3JlcCB7ICRfID09ICRTZXJ2aWNlSUQxIHx8ICRfID09ICRTZXJ2aWNlSUQyIH0ga2V5cyAlTGlzdDsKICAgICAgICBteSAlVGVtcDsKICAgICAgICBAVGVtcHtARmlsdGVyfSA9IEBMaXN0e0BGaWx0ZXJ9OwogICAgICAgICVMaXN0ID0gJVRlbXA7CgogICAgICAgICMgfQogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgXCVMaXN0LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0fSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDaGVjayBpZiByZXN1bHQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4iLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICVMaXN0ID8gMSA6IDAsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ0NDaGVjayBpZiByZXN1bHQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4iLAogICAgICAgICk7CiAgICB9Cn0KCiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMSwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIFVzZXJJRCBhbmQgVGlja2V0SUQnLAogICAgICAgIFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IHsKICAgICAgICAgICAgIiRTZXJ2aWNlSUQxIiA9PiAnVGVzdFNlcnZpY2UxJyAuICRSYW5kb20sCiAgICAgICAgICAgICIkU2VydmljZUlEMiIgPT4gJ1Rlc3RTZXJ2aWNlMicgLiAkUmFuZG9tLAoKICAgICAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBvdGhlciBzZXJ2aWNlcyBhcyB3ZWxsLi4uCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdUaWNrZXRTZXJ2aWNlTGlzdCgpIC0gVXNlcklEIGFuZCBRdWV1ZUlEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBRdWV1ZUlEID0+ICRRdWV1ZUlELAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CiAgICAgICAgICAgICIkU2VydmljZUlEMSIgPT4gJ1Rlc3RTZXJ2aWNlMScgLiAkUmFuZG9tLAogICAgICAgICAgICAiJFNlcnZpY2VJRDIiID0+ICdUZXN0U2VydmljZTInIC4gJFJhbmRvbSwKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIEN1c3RvbWVyVXNlcklEIGFuZCBRdWV1ZUlEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CiAgICAgICAgICAgICIkU2VydmljZUlEMSIgPT4gJ1Rlc3RTZXJ2aWNlMScgLiAkUmFuZG9tLAoKICAgICAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBvdGhlciBzZXJ2aWNlcyBhcyB3ZWxsLi4uCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdUaWNrZXRTZXJ2aWNlTGlzdCgpIC0gQ3VzdG9tZXJVc2VySUQgYW5kIFRpY2tldElEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gewogICAgICAgICAgICAiJFNlcnZpY2VJRDEiID0+ICdUZXN0U2VydmljZTEnIC4gJFJhbmRvbSwKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICBteSAlTGlzdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlcnZpY2VMaXN0KAogICAgICAgICV7ICRUZXN0LT57UGFyYW1zfSB9LAogICAgKTsKCiAgICBpZiAoICRUZXN0LT57RXhwZWN0ZWRSZXN1bHR9ICkgewoKICAgICAgICAjIFJlbW92ZSBhbGwgb3RoZXIgc2VydmljZXMgdGhhdCBhcmUgbm90IGNyZWF0ZWQgaW4gdGhpcyB0ZXN0LgogICAgICAgIG15IEBGaWx0ZXIgPSBncmVwIHsgJF8gPT0gJFNlcnZpY2VJRDEgfHwgJF8gPT0gJFNlcnZpY2VJRDIgfSBrZXlzICVMaXN0OwogICAgICAgIG15ICVUZW1wOwogICAgICAgIEBUZW1we0BGaWx0ZXJ9ID0gQExpc3R7QEZpbHRlcn07CiAgICAgICAgJUxpc3QgPSAlVGVtcDsKCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICBcJUxpc3QsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXN1bHR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENoZWNrIGlmIHJlc3VsdCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLiIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJUxpc3QgPyAxIDogMCwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDQ0NoZWNrIGlmIHJlc3VsdCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLiIsCiAgICAgICAgKTsKICAgIH0KfQoKIyBDbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAzMmUyZWU5ZTIwMzg4ZGI5YWUxMGExYzc0MTRiMjc0MjcyYjdjOTM2IC0gc2NyaXB0cy90ZXN0L0N1c3RvbWVyVXNlclNlcnZpY2UudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBkb24ndCBjaGVjayBlbWFpbCBhZGRyZXNzIHZhbGlkaXR5CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIHNhdmUgYWxsIG9yaWdpbmFsIGRlZmF1bHQgc2VydmljZXMKbXkgQE9yaWdpbmFsRGVmYXVsdFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAogICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKKTsKCiMgZGVsZXRlIGFsbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBhZGQgc2VydmljZTEKbXkgJFNlcnZpY2VSYW5kMSA9ICdTb21lU2VydmljZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkU2VydmljZUlEMSAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlUmFuZDEsCiAgICBDb21tZW50ID0+ICdTb21lIENvbW1lbnQnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRDEsCiAgICAnU2VydmljZUFkZDEoKScsCik7CgojIGFkZCBzZXJ2aWNlMgpteSAkU2VydmljZVJhbmQyID0gJ1NvbWVTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cm15ICRTZXJ2aWNlSUQyICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFNlcnZpY2VSYW5kMiwKICAgIENvbW1lbnQgPT4gJ1NvbWUgQ29tbWVudCcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQopOwoKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMiwKICAgICdTZXJ2aWNlQWRkMigpJywKKTsKCm15ICRDdXN0b21lclVzZXIxID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7Cm15ICRDdXN0b21lclVzZXIyID0gJEhlbHBlci0+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+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKbXkgJEFsbG9jYXRpb24xNUNvdW50ID0gQEFsbG9jYXRpb24xNTsKbXkgJEFsbG9jYXRpb24xNU9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNUNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNVswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE1WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTVbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNVsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTVPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTUoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNgpteSBAQWxsb2NhdGlvbjE2ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNkNvdW50ID0gQEFsbG9jYXRpb24xNjsKbXkgJEFsbG9jYXRpb24xNk9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNkNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNlswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE2WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTZbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNlsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTZPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTYoKScsCik7CgojIHJlbmFtZSBjdXN0b21lciB1c2VyMQpteSAlQ3VzdG9tZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyMSwKKTsKbXkgJE5ld0N1c3RvbWVyVXNlcjEgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkVXBkYXRlICAgICAgICAgICA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlclVwZGF0ZSgKICAgICVDdXN0b21lciwKICAgIElEICAgICAgICA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFVzZXJMb2dpbiA9PiAkTmV3Q3VzdG9tZXJVc2VyMSwKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAiQ3VzdG9tZXJVc2VyVXBkYXRlIC0gJEN1c3RvbWVye1VzZXJMb2dpbn0gLSAkTmV3Q3VzdG9tZXJVc2VyMSIsCik7CgojIGFsbG9jYXRpb24gdGVzdCBhZnRlciByZW5hbWUKIyBpbnN0YW50aWF0ZSBuZXcgc2VydmljZSBvYmplY3QgYmVjYXVzZSBvZiBjYWNoaW5nIQokS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoIE9iamVjdHMgPT4gWydLZXJuZWw6OlN5c3RlbTo6U2VydmljZSddICk7CiRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCm15IEBBbGxvY2F0aW9uMTcgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMTcsCiAgICAwLAogICAgIk5vIHNlcnZpY2VzIGFsbG9jYXRlZCB0byBvbGQgY3VzdG9tZXIgJEN1c3RvbWVyVXNlcjEgYWZ0ZXIgcmVuYW1lIiwKKTsKbXkgQEFsbG9jYXRpb24xOCA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICROZXdDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xOCwKICAgIDEsCiAgICAiU2VydmljZXMgYWxsb2NhdGVkIHRvIG5ldyBjdXN0b21lciAkTmV3Q3VzdG9tZXJVc2VyMSBhZnRlciByZW5hbWUiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHZhcnMgcXcoJFNlbGYpOwoKbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QgKFVzZXJJRCBpcyBuZWVkZWQpCm15ICRBbGxvY2F0ZURhdGExID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRBbGxvY2F0ZURhdGExLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdApteSAkQWxsb2NhdGVEYXRhMiA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoICRBbGxvY2F0ZURhdGEyLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJEhhc2hPSyA9IDE7CmlmICggcmVmICRBbGxvY2F0ZURhdGEyIG5lICdIQVNIJyApIHsKICAgICRIYXNoT0sgPSAwOwp9CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIDJkIGhhc2gKaWYgKCRIYXNoT0spIHsKCiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfSApIHsKCiAgICAgICAgaWYgKCByZWYgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICBsYXN0IElNUEFDVDsKICAgICAgICB9CgogICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5IHx8ICEkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICAgICAgbGFzdCBJTVBBQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiMgY2hlY2sgSGFzaE9LCiRTZWxmLT5UcnVlKCAkSGFzaE9LLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNhbGwgUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkgZm9yIG9uZSBDcml0aWNhbGl0eS9JbXBhY3QgcGFpcgppZiAoJEhhc2hPSykgewoKICAgIG15ICgkSW1wYWN0KSA9IHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfTsKCiAgICBpZiAoICRBbGxvY2F0ZURhdGEyLT57JEltcGFjdH0gKSB7CiAgICAgICAgbXkgKCRDcml0aWNhbGl0eSkgPSBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9OwoKICAgICAgICBteSAkRXhwZWN0ZWRQcmlvcml0eUlEID0gJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CiAgICAgICAgbXkgJFByaW9yaXR5SUQgICAgICAgICA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRJbXBhY3QsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRQcmlvcml0eUlELAogICAgICAgICAgICAkRXhwZWN0ZWRQcmlvcml0eUlELAogICAgICAgICAgICAnUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCknLAogICAgICAgICk7CiAgICB9Cn0KCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MxID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MxLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MyID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRTdWNjZXNzMiwgJ0FsbG9jYXRlVXBkYXRlKCknICk7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoIChhbGxvY2F0aW9uIGhhc2gpCm15ICRTdWNjZXNzMyA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICBBbGxvY2F0ZURhdGEgPT4gewogICAgICAgIFRlc3QgID0+ICdhYWEnLAogICAgICAgIFRlc3QyID0+ICdiYmInLAogICAgfSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MzLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJFN1Y2Nlc3M0ID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5UcnVlKCAkU3VjY2VzczQsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAzMmUyZWU5ZTIwMzg4ZGI5YWUxMGExYzc0MTRiMjc0MjcyYjdjOTM2IC0gc2NyaXB0cy90ZXN0L1NlcnZpY2UudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjcmVhdGUgbmVlZGVkIHVzZXJzCm15IEBVc2VySURzOwp7CgogICAgIyBkaXNhYmxlIGVtYWlsIGNoZWNrcyB0byBjcmVhdGUgbmV3IHVzZXIKICAgIG15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJykgfHwgMTsKICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gMCwKICAgICk7CgogICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAyICkgewoKICAgICAgICAjIGNyZWF0ZSBuZXcgdXNlcnMgZm9yIHRoZSB0ZXN0cwogICAgICAgIG15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckFkZCgKICAgICAgICAgICAgVXNlckZpcnN0bmFtZSA9PiAnU2VydmljZScgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1TZXJ2aWNlLScgLiAkQ291bnRlciAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICA9PiAnVW5pdFRlc3QtU2VydmljZS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSBzZXJ2aWNlIG5hbWVzCm15IEBTZXJ2aWNlTmFtZTsKZm9yIG15ICRDb3VudGVyICggMSAuLiAxMSApIHsKICAgIHB1c2ggQFNlcnZpY2VOYW1lLCAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwp9CgojIGdldCBvcmlnaW5hbCBzZXJ2aWNlIGxpc3QgZm9yIGxhdGVyIGNoZWNrcwpteSAlU2VydmljZUxpc3RPcmlnaW5hbCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUyJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzZXJ2aWNlIHVwZGF0ZSBhcmd1bWVudHMgYXJlIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJzo6VVBEQVRFNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnOjpUZXN0OjpVUERBVEU0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsyXSAuICc6OlRlc3QnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJzo6VGVzdCcgLiAkU2VydmljZU5hbWVbMl0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMl0gLiAnOjpUZXN0OjpUZXN0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsyXSAuICdUZXN0OjonLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyICIgLiAkU2VydmljZU5hbWVbM10gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVszXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVszXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNlcnZpY2VOYW1lWzNdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbM10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzNdIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChVbmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPnicsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKFVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAocGFyZW50IHNlcnZpY2UgY2hlY2spCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICdMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzVdIC4gJzo6JyAuICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChwYXJlbnQgc2VydmljZSBjaGVjaykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gIiBcbiBcdCAiIC4gJFNlcnZpY2VOYW1lWzddIC4gIiBcbiBcdCAiLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzZdIC4gJzo6JyAuICRTZXJ2aWNlTmFtZVs3XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2UgbXVzdCBiZSBOT1QgdXBkYXRlZCAocGFyZW50IHNlcnZpY2UgaWQgYW5kIHBhcmVudCBpZCBhcmUgaWRlbnRpY2FsKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFBhcmVudElEID0+ICdMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAobW92ZSBzZXJ2aWNlIHRvIHRoZSBoaWdoZXN0IGxldmVsKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFBhcmVudElEID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKG1vdmUgc2VydmljZSBiYWNrIHdpdGggdGhlIG9sZCBwYXJlbnQgc2VydmljZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVExBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonCiAgICAgICAgICAgICAgICAuICRTZXJ2aWNlTmFtZVs2XSAuICc6OicKICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VOYW1lWzddCiAgICAgICAgICAgICAgICAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LApdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRUZXN0Q291bnQgPSAxOwpteSAkTGFzdEFkZGVkU2VydmljZUlEOwpteSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKbXkgJEFkZGVkQ291bnRlciA9IDA7Cgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CgogICAgaWYgKCAkSXRlbS0+e0FkZH0gKSB7CgogICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICBpZiAoICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSA9ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QWRkfS0+e1BhcmVudElEfTsKICAgICAgICB9CgogICAgICAgICMgYWRkIG5ldyBzZXJ2aWNlCiAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAleyAkSXRlbS0+e0FkZH0gfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2Ugd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9IGVxICdMQVNUQURESUQnICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RMQVNUQURESUQnICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VBZGQoKSAtIFNlcnZpY2VJRDogJFNlcnZpY2VJRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFNlcnZpY2VJRCkgewoKICAgICAgICAgICAgICAgICMgbG9va3VwIHNlcnZpY2UgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEICk7CgogICAgICAgICAgICAgICAgIyBsb29rdXAgdGVzdAogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlTmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRoZSBzZXJ2aWNlIGlkCiAgICAgICAgICAgICAgICBteSAkU2VydmljZUlETmV3ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIE5hbWUgPT4gJFNlcnZpY2VOYW1lIHx8ICcnICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VJRE5ldyB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkU2VydmljZUlEICAgIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBzZXJ2aWNlIGlkIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRCA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgICAgICAgICAkTGFzdEFkZGVkU2VydmljZUlEICAgICA9ICRTZXJ2aWNlSUQ7CgogICAgICAgICAgICAgICAgIyBpbmNyZW1lbnQgdGhlIGFkZGVkIGNvdW50ZXIKICAgICAgICAgICAgICAgICRBZGRlZENvdW50ZXIrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VBZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciBjcmVhdGlvbiBvZiB0aGUgc2VydmljZQogICAgICAgIG15ICVTZXJ2aWNlR2V0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNlcnZpY2UgZGF0YSBhZnRlciBjcmVhdGlvbiBvZiB0aGUgc2VydmljZQogICAgICAgIGZvciBteSAkU2VydmljZUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlcnZpY2VHZXR7JFNlcnZpY2VBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57JFNlcnZpY2VBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUdldCgpIC0gJFNlcnZpY2VBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57VXBkYXRlfSApIHsKCiAgICAgICAgIyBjaGVjayBsYXN0IHNlcnZpY2UgaWQgdmFyaWFibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkU2VydmljZUlEICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogTk8gTEFTVCBTRVJWSUNFIElEIEdJVkVOIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ICYmICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSA9ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBzZXJ2aWNlCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgU2VydmljZUlEID0+ICRMYXN0QWRkZWRTZXJ2aWNlSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVVwZGF0ZSgpIC0gU2VydmljZUlEOiAkTGFzdEFkZGVkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlVXBkYXRlKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgbm9uLWV4aXN0aW5nIHNlcnZpY2UKICAgICAgICBteSAkTm9uZXhpc3RpbmdTZXJ2aWNlSUQgPSAzMjU2NyAtIDE7CiAgICAgICAgbXkgJFVwZGF0ZU5vblN1Y2VzcyAgICAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJE5vbmV4aXN0aW5nU2VydmljZUlELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkVXBkYXRlTm9uU3VjZXNzLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlVXBkYXRlKCkgZm9yIG5vbmV4aXN0aW5nIHNlcnZpY2UiLAogICAgICAgICk7CgogICAgICAgICMgcHJlcGFyZSBwYXJlbnQgaWQKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9CiAgICAgICAgICAgICYmICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciB0aGUgdXBkYXRlCiAgICAgICAgbXkgJVNlcnZpY2VHZXQyID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkTGFzdEFkZGVkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNlcnZpY2UgZGF0YSBhZnRlciB1cGRhdGUKICAgICAgICBmb3IgbXkgJFNlcnZpY2VBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRTZXJ2aWNlR2V0MnskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPnskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSAkU2VydmljZUF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cCBzZXJ2aWNlIG5hbWUKICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggU2VydmljZUlEID0+ICRTZXJ2aWNlR2V0MntTZXJ2aWNlSUR9ICk7CgogICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZXJ2aWNlTmFtZSB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VHZXQye05hbWV9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNlcnZpY2UgaWQKICAgICAgICBteSAkU2VydmljZUlETmV3ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIE5hbWUgPT4gJFNlcnZpY2VOYW1lIHx8ICcnICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlcnZpY2VJRE5ldyB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VHZXQye1NlcnZpY2VJRH0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEFkZGl0aW9uYWwgU2VydmljZUdldCB0ZXN0IChCeSBTZXJ2aWNlTmFtZSBhbmQgU2VydmljZUlEKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgIyBnZXQgYSBzZXJ2aWNlIGJ5IHVzaW5nIHRoZSBzZXJ2aWNlIG5hbWUKICAgIG15ICVTZXJ2aWNlR2V0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRTZXJ2aWNlR2V0e05hbWV9LAogICAgICAgICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSBieSBzZXJ2aWNlIG5hbWUiLAogICAgKTsKCiAgICAjIGdldCB0aGUgc2FtZSBzZXJ2aWNlIGJ5IHVzaW5nIHRoZSBzZXJ2aWNlIGlkCiAgICAlU2VydmljZUdldCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUdldHtTZXJ2aWNlSUR9LAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlcnZpY2VHZXR7TmFtZX0sCiAgICAgICAgJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtIGJ5IHNlcnZpY2UgaWQiLAogICAgKTsKCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlTGlzdCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJVNlcnZpY2VMaXN0MSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7Cm15ICVTZXJ2aWNlTGlzdDFPcmcgPSAlU2VydmljZUxpc3RPcmlnaW5hbDsKClNFUlZJQ0VJRDoKZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0MU9yZyApIHsKCiAgICBpZiAoICRTZXJ2aWNlTGlzdDF7JFNlcnZpY2VJRH0gJiYgJFNlcnZpY2VMaXN0MU9yZ3skU2VydmljZUlEfSBlcSAkU2VydmljZUxpc3QxeyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3QxeyRTZXJ2aWNlSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlcnZpY2VMaXN0MXtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU2VydmljZUxpc3QxQ291bnQgPSBzY2FsYXIga2V5cyAlU2VydmljZUxpc3QxOwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VMaXN0MUNvdW50IHx8ICcnLAogICAgJEFkZGVkQ291bnRlciAgICAgIHx8ICcnLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxpc3QoKSIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZUxpc3QgdGVzdCAyIChjaGVjayBjYWNoZSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJVNlcnZpY2VMaXN0MiA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgpteSAkU2VydmljZUxpc3QyU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs5XSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCik7CgpteSAlU2VydmljZUxpc3QyYiA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgpTRVJWSUNFSUQ6CmZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdDIgKSB7CgogICAgaWYgKCAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfSAmJiAkU2VydmljZUxpc3QyeyRTZXJ2aWNlSUR9IGVxICRTZXJ2aWNlTGlzdDJieyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZXJ2aWNlTGlzdDJie0R1bW15fSA9IDE7CiAgICB9Cn0KCm15IEBTZXJ2aWNlTGlzdDJJRHMgICA9IGtleXMgJVNlcnZpY2VMaXN0MmI7Cm15ICRTZXJ2aWNlTGlzdDJDb3VudCA9IHNjYWxhciBAU2VydmljZUxpc3QySURzOwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VMaXN0MkNvdW50IHx8ICcnLAogICAgMSwKICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMaXN0KCkgLSBjaGVjayBudW1iZXIgb2Ygc2VydmljZXMiLAopOwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VMaXN0MklEc1swXSB8fCAnJywKICAgICRTZXJ2aWNlTGlzdDJTZXJ2aWNlSUQgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIC0gY2hlY2sgaWQgb2YgbGFzdCBzZXJ2aWNlIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlU2VhcmNoIHRlc3QgMSAoY2hlY2sgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSBAU2VydmljZVNlYXJjaDFTZWFyY2ggPSAkU2VydmljZU9iamVjdC0+U2VydmljZVNlYXJjaCggVXNlcklEID0+IDEgKTsKCm15ICVTZXJ2aWNlU2VhcmNoMUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIEtlZXBDaGlsZHJlbiA9PiAxLAopOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VTZWFyY2gxU2VhcmNoKSB7CgogICAgaWYgKCAkU2VydmljZVNlYXJjaDFMaXN0eyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZVNlYXJjaDFMaXN0eyRTZXJ2aWNlSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlcnZpY2VTZWFyY2gxTGlzdHtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU2VydmljZVNlYXJjaDFDb3VudCA9IHNjYWxhciBrZXlzICVTZXJ2aWNlU2VhcmNoMUxpc3Q7CgokU2VsZi0+SXMoCiAgICAkU2VydmljZVNlYXJjaDFDb3VudCwKICAgIDAsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlU2VhcmNoKCkiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zIGZvciBsYXRlciB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGFkZCBzb21lIG5lZWRlZCBzZXJ2aWNlcyBmb3IgbGF0ZXIgdGVzdHMKbXkgQFNlcnZpY2VOYW1lcyA9ICggJFNlcnZpY2VOYW1lWzEwXSAuICdOb3JtYWwnLCAkU2VydmljZU5hbWVbMTBdIC4gJ9SIINO0IM+qIM++JyApOwpteSAlU2VydmljZVNlYXJjaDJTZXJ2aWNlSUQ7CgpteSAkQ291bnRlcjEgPSAwOwpmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZU5hbWVzKSB7CgogICAgJFNlcnZpY2VTZWFyY2gyU2VydmljZUlEeyRDb3VudGVyMX0gPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCiAgICAkQ291bnRlcjErKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VTZWFyY2ggdGVzdCAyIChnZW5lcmFsIG5hbWUgY2hlY2tzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ291bnRlcjIgPSAwOwpmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZU5hbWVzKSB7CgogICAgbXkgQFByZXBhcmVkTmFtZXMgPSAoCiAgICAgICAgJFNlcnZpY2VOYW1lLAogICAgICAgICcqJyAuICRTZXJ2aWNlTmFtZSwKICAgICAgICAkU2VydmljZU5hbWUgLiAnKicsCiAgICAgICAgJyonIC4gJFNlcnZpY2VOYW1lIC4gJyonLAogICAgICAgICcqKicgLiAkU2VydmljZU5hbWUsCiAgICAgICAgJFNlcnZpY2VOYW1lIC4gJyoqJywKICAgICAgICAnKionIC4gJFNlcnZpY2VOYW1lIC4gJyoqJywKICAgICk7CgogICAgZm9yIG15ICRQcmVwYXJlZE5hbWUgKEBQcmVwYXJlZE5hbWVzKSB7CgogICAgICAgIG15IEBTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlU2VhcmNoKAogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZXJ2aWNlTGlzdFswXSB8fCAnJywKICAgICAgICAgICAgJFNlcnZpY2VTZWFyY2gyU2VydmljZUlEeyRDb3VudGVyMn0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VTZWFyY2goKSAtIGdlbmVyYWwgbmFtZSBjaGVjayIsCiAgICAgICAgKTsKCiAgICAgICAgJFRlc3RDb3VudCsrOwogICAgfQoKICAgICRDb3VudGVyMisrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZUxpc3RHZXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZXMKbXkgJFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0R2V0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgaWYgcmVzdWx0IGlzIGFuIGFycmF5IHJlZgokU2VsZi0+SXMoCiAgICByZWYgJFNlcnZpY2VMaXN0LAogICAgJ0FSUkFZJywKICAgICJTZXJ2aWNlTGlzdEdldCgpIC0gSXMgQXJyYXkiLAopOwoKIyBjaGVjayBpZiBlYWNoIGFycmF5IGl0ZW0gaXMgYSBoYXNoIHJlZgp7CiAgICBteSAkQ291bnRlcjsKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICByZWYgJFNlcnZpY2VEYXRhLAogICAgICAgICAgICAnSEFTSCcsCiAgICAgICAgICAgICJTZXJ2aWNlTGlzdEdldFskQ291bnRlcl0gLSBJcyBIYXNoIiwKICAgICAgICApOwogICAgfQp9CgojIGNoZWNrIGludGVncml0eSBvZiBlYWNoIGFycmF5IGVsZW1lbnQKewogICAgbXkgJENvdW50ZXI7CiAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAojIC0tLQogICAgICAgICk7CiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YSwKICAgICAgICAgICAgXCVTZXJ2aWNlLAogICAgICAgICAgICAiU2VydmljZUxpc3RHZXRbJENvdW50ZXJdIC0gQ29tcGFyZWQgdG8gU2VydmljZUdldCIsCiAgICAgICAgKTsKICAgIH0KfQoKIyBhZGQgc2VydmljZXMKbXkgJFNlcnZpY2VHcmFuZEZhdGhlcklEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgICA9PiAnVW5pdFRlc3RTZXJ2aWNlX0dGXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBDb21tZW50ICA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZUdyYW5kRmF0aGVyIgopOwoKbXkgJFNlcnZpY2VGYXRoZXJJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0U2VydmljZV9GXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBWYWxpZElEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIENvbW1lbnQgID0+ICdUZXN0aW5nIHNlcnZpY2UnLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VGYXRoZXJJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZUZhdGhlciIKKTsKCm15ICRTZXJ2aWNlU29uSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgID0+ICdVbml0VGVzdFNlcnZpY2VfU18nIC4gJFJhbmRvbUlELAogICAgUGFyZW50SUQgPT4gJFNlcnZpY2VGYXRoZXJJRCwKICAgIFZhbGlkSUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgQ29tbWVudCAgPT4gJ1Rlc3Rpbmcgc2VydmljZScsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZVNvbklELAogICAgIlNlcnZpY2VBZGQoKSAtIGZvciBTZXJ2aWNlU29uIgopOwoKIyBnZXQgdGhlIHNlcnZpY2UgbGlzdCBhZ2FpbgpteSAkTmV3U2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjb21wYXJlIHRoZSBzZXJ2aWNlIGxpc3RzIChzaG91bGQgYmUgbm90IGVxdWFsIHNpbmNlIG5ldyBzZXJ2aWNlcyB3aGVyZSBhZGRlZCkKJFNlbGYtPklzTm90RGVlcGx5KAogICAgJFNlcnZpY2VMaXN0LAogICAgJE5ld1NlcnZpY2VMaXN0LAogICAgIlNlcnZpY2VMaXN0R2V0KCkgLSBjb21wYXJlZCB3aXRoIGl0c2VsZiBhZnRlciBhZGRpbmcgbmV3IHNlcnZpY2VzIgopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VQYXJlbnRzR2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRoZSBwYXJlbnRzIGZvciBncmFuZCBmYXRoZXIKbXkgJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgW10sCiAgICAiU2VydmljZVBhcmVudHNMaXN0R2V0IC0gZm9yIFNlcnZpY2VHcmFuZEZhdGhlciIKKTsKCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFtdLAogICAgIlNlcnZpY2VQYXJlbnRzTGlzdEdldCAtIGZvciBTZXJ2aWNlR3JhbmRGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3IgZmF0aGVyCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUZhdGhlcklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbJFNlcnZpY2VHcmFuZEZhdGhlcklEXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlRmF0aGVyIgopOwoKJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFskU2VydmljZUdyYW5kRmF0aGVySURdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3Igc29uCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZVNvbklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwgJFNlcnZpY2VGYXRoZXJJRCBdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VTb24iCik7CgokU2VydmljZVBhcmVudHMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VTb25JRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgWyAkU2VydmljZUdyYW5kRmF0aGVySUQsICRTZXJ2aWNlRmF0aGVySUQgXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlU29uIChjYWNoZWQpIgopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAzMmUyZWU5ZTIwMzg4ZGI5YWUxMGExYzc0MTRiMjc0MjcyYjdjOTM2IC0gc2NyaXB0cy90ZXN0L1NMQS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDIgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdTTEEnIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtU0xBLScgLiAkQ291bnRlciAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LVNMQS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSBzZXJ2aWNlIG5hbWVzCm15IEBTTEFOYW1lOwpmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDEwICkgewogICAgcHVzaCBAU0xBTmFtZSwgJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cn0KCiMgY3JlYXRlIHNvbWUgdGVzdCBzZXJ2aWNlcwpteSBAU2VydmljZUlEczsKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgICMgYWRkIGEgc2VydmljZQogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgPT4gJ1VuaXRUZXN0LVNMQScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKICAgIHB1c2ggQFNlcnZpY2VJRHMsICRTZXJ2aWNlSUQ7Cn0KCiMgZ2V0IG9yaWdpbmFsIFNMQSBsaXN0IGZvciBsYXRlciBjaGVja3MKbXkgJVNMQUxpc3RPcmlnaW5hbCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJdGVtRGF0YSA9IFsKCiAgICAjIHRoaXMgU0xBIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgIyB0aGlzIFNMQSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCgogICAgIyBzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBvbmUgdGVzdCBiZWZvcmUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBcZG8geydEdW1teSd9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayB0aGUgcmV0dXJuZWQgc2VydmljZSBpZCBhcnJheSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayB0aGUgc29ydGluZyBvZiB0aGUgcmV0dXJuZWQgc2VydmljZSBpZCBhcnJheSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMl0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdLCAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzJdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzJdLCAkU2VydmljZUlEc1swXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA2MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0sICRTZXJ2aWNlSURzWzFdLCAkU2VydmljZUlEc1syXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA2MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoU0xBIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKFNMQSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTInLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAyMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiA0MCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA2MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA3MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUyJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDIwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDMwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDQwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDcwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChTTEEgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDMwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDQwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDUwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDcwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTMnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDMwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDQwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDUwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDcwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTMnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIFNMQSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNMQU5hbWVbNF0gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVs0XSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMV0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiIFx0IFxuIFxyICIgLiAkU0xBTmFtZVs0XSAuICIgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzFdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNF0gLiAnIFVQREFURTEnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3QgQ29tbWVudCBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKFVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbNV0gLiAnIM+SIM+hIMapIM+eICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnINGgINGkIFRlc3RDb21tZW50NSDPoCDOqSAnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDMsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPnicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDMsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgU0xBIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAoVW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVs1XSAuICcgz5Igz6Egxqkgz54gVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnINGgINGkIFRlc3RDb21tZW50NSDPoCDOqSBVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNV0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ9GgINGkIFRlc3RDb21tZW50NSDPoCDOqSBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJyBbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTTEFOYW1lWzZdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZFNMQUlEOwpteSAkQWRkZWRDb3VudGVyID0gMDsKCmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBhZGQgbmV3IFNMQQogICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCggJXsgJEl0ZW0tPntBZGR9IH0gKTsKCiAgICAgICAgIyBjaGVjayBpZiBTTEEgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBQWRkKCkgLSBTTEFJRDogJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU0xBSUQpIHsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCBTTEEgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNMQU5hbWUgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoIFNMQUlEID0+ICRTTEFJRCApOwoKICAgICAgICAgICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU0xBTmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIFNMQSBpZAogICAgICAgICAgICAgICAgbXkgJFNMQUlETmV3ID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKCBOYW1lID0+ICRTTEFOYW1lIHx8ICcnICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNMQUlETmV3IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRTTEFJRCAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBTTEEgaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRTTEFJRCA9ICRTTEFJRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFBZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBTTEEgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBTTEEKICAgICAgICBteSAlU0xBR2V0ID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICAgICAgQ2FjaGUgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBTTEEgZGF0YSBhZnRlciBjcmVhdGlvbiBvZiB0aGUgU0xBCiAgICAgICAgZm9yIG15ICRTTEFBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntBZGRHZXR9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGF0dHJpYnV0ZXMKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFNMQUdldHskU0xBQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBR2V0KCkgLSAkU0xBQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCBTTEEgaWQgdmFyaWFibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkU0xBSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIFNFUlZJQ0UgSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIFNMQQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTTEFJRCA9PiAkTGFzdEFkZGVkU0xBSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBTTEEgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFVcGRhdGUoKSAtIFNMQUlEOiAkTGFzdEFkZGVkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IFNMQSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICVTTEFHZXQyID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJExhc3RBZGRlZFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIFNMQSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkU0xBQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57VXBkYXRlR2V0fSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRTTEFHZXQyeyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57JFNMQUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFHZXQoKSAtICRTTEFBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAgU0xBIG5hbWUKICAgICAgICBteSAkU0xBTmFtZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUdldDJ7U0xBSUR9ICk7CgogICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFOYW1lIHx8ICcnLAogICAgICAgICAgICAkU0xBR2V0MntOYW1lfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIFNMQSBpZAogICAgICAgIG15ICRTTEFJRE5ldyA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggTmFtZSA9PiAkU0xBTmFtZSB8fCAnJyApOwoKICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFJRE5ldyB8fCAnJywKICAgICAgICAgICAgJFNMQUdldDJ7U0xBSUR9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNMQUxpc3QgdGVzdCAxIChjaGVjayBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVTTEFMaXN0MSA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwpteSAlU0xBTGlzdDFPcmcgPSAlU0xBTGlzdE9yaWdpbmFsOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNMQUlEICggc29ydCBrZXlzICVTTEFMaXN0MU9yZyApIHsKCiAgICBpZiAoICRTTEFMaXN0MXskU0xBSUR9ICYmICRTTEFMaXN0MU9yZ3skU0xBSUR9IGVxICRTTEFMaXN0MXskU0xBSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU0xBTGlzdDF7JFNMQUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEFMaXN0MXtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU0xBTGlzdDFDb3VudCA9IHNjYWxhciBrZXlzICVTTEFMaXN0MTsKCiRTZWxmLT5JcygKICAgICRTTEFMaXN0MUNvdW50IHx8ICcnLAogICAgJEFkZGVkQ291bnRlciAgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMaXN0KCkiLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAyNTA3ZGM4OGEzMzUwYWRjMzYyNTgwYjRmZDU3YjM2OGI3MjY1YzdmIC0gc2NyaXB0cy90ZXN0L1RpY2tldC50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkUXVldWVPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKbXkgJFNlcnZpY2VPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwpteSAkU3RhdGVPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKbXkgJFRpY2tldE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkQXJ0aWNsZU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7Cm15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ0ludGVybmFsJyApOwpteSAkRGF0ZVRpbWVPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKbXkgJFR5cGVPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKbXkgJFVzZXJPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSAgPT4gMSwKICAgICAgICBVc2VUbXBBcnRpY2xlRGlyID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgc2V0IGZpeGVkIHRpbWUKJEhlbHBlci0+Rml4ZWRUaW1lU2V0KCk7CgpteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElELAogICAgJ1RpY2tldENyZWF0ZSgpJywKKTsKCm15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBFeHRlbmRlZCA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1RpdGxlfSwKICAgICdTb21lIFRpY2tldF9UaXRsZScsCiAgICAnVGlja2V0R2V0KCkgKFRpdGxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7UXVldWV9LAogICAgJ1JhdycsCiAgICAnVGlja2V0R2V0KCkgKFF1ZXVlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7UHJpb3JpdHl9LAogICAgJzMgbm9ybWFsJywKICAgICdUaWNrZXRHZXQoKSAoUHJpb3JpdHkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtTdGF0ZX0sCiAgICAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgJ1RpY2tldEdldCgpIChTdGF0ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e093bmVyfSwKICAgICdyb290QGxvY2FsaG9zdCcsCiAgICAnVGlja2V0R2V0KCkgKE93bmVyKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7Q3JlYXRlQnl9LAogICAgMSwKICAgICdUaWNrZXRHZXQoKSAoQ3JlYXRlQnkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtDaGFuZ2VCeX0sCiAgICAxLAogICAgJ1RpY2tldEdldCgpIChDaGFuZ2VCeSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1RpdGxlfSwKICAgICdTb21lIFRpY2tldF9UaXRsZScsCiAgICAnVGlja2V0R2V0KCkgKFRpdGxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7UmVzcG9uc2libGV9LAogICAgJ3Jvb3RAbG9jYWxob3N0JywKICAgICdUaWNrZXRHZXQoKSAoUmVzcG9uc2libGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtMb2NrfSwKICAgICd1bmxvY2snLAogICAgJ1RpY2tldEdldCgpIChMb2NrKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7U2VydmljZUlEfSwKICAgICcnLAogICAgJ1RpY2tldEdldCgpIChTZXJ2aWNlSUQpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtTTEFJRH0sCiAgICAnJywKICAgICdUaWNrZXRHZXQoKSAoU0xBSUQpJywKKTsKCm15ICREZWZhdWx0VGlja2V0VHlwZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpUeXBlOjpEZWZhdWx0Jyk7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7VHlwZUlEfSwKICAgICRUeXBlT2JqZWN0LT5UeXBlTG9va3VwKCBUeXBlID0+ICREZWZhdWx0VGlja2V0VHlwZSApLAogICAgJ1RpY2tldEdldCgpIChUeXBlSUQpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtDbG9zZWR9LAogICAgJFRpY2tldHtDcmVhdGVkfSwKICAgICdUaWNrZXQgY3JlYXRlZCBhcyBjbG9zZWQgYXMgQ2xvc2UgVGltZSA9IENyZWF0aW9uIFRpbWUnLAopOwoKbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICd1c2VycycsIF0sCik7CgpteSAkVGVzdFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAopOwoKbXkgJFRpY2tldElEQ3JlYXRlZEJ5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZScsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgQ3VzdG9tZXJObyAgID0+ICcxMjM0NjUnLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAkVGVzdFVzZXJJRCwKKTsKCm15ICVDaGVja0NyZWF0ZWRCeSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRENyZWF0ZWRCeSwKICAgIFVzZXJJRCAgID0+ICRUZXN0VXNlcklELAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e0NoYW5nZUJ5fSwKICAgICRUZXN0VXNlcklELAogICAgJ1RpY2tldEdldCgpIChDaGFuZ2VCeSAtIG5vdCBzeXN0ZW0gSUQgMSB1c2VyKScsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q3JlYXRlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5IC0gbm90IHN5c3RlbSBJRCAxIHVzZXIpJywKKTsKCiRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRENyZWF0ZWRCeSwKICAgIE5ld1VzZXJJRCA9PiAkVGVzdFVzZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJUNoZWNrQ3JlYXRlZEJ5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEQ3JlYXRlZEJ5LAogICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q3JlYXRlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5IC0gc3RpbGwgdGhlIHNhbWUgYWZ0ZXIgT3duZXJTZXQpJywKKTsKCiRTZWxmLT5JcygKICAgICRDaGVja0NyZWF0ZWRCeXtPd25lcklEfSwKICAgICRUZXN0VXNlcklELAogICAgJ1RpY2tldE93bmVyU2V0KCknLAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e0NoYW5nZUJ5fSwKICAgIDEsCiAgICAnVGlja2V0T3duZXJTZXQoKSAoQ2hhbmdlQnkgLSBTeXN0ZW0gSUQgMSBub3cpJywKKTsKCm15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMCwKICAgIEZyb20gPT4KICAgICAgICAnU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgVG8gPT4KICAgICAgICAnU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgIFNvbWUgQ3VzdG9tZXIgQVNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgIENjID0+CiAgICAgICAgJ1NvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBSZXBseVRvID0+CiAgICAgICAgJ1NvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ID0+CiAgICAgICAgJ3NvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiAnLAogICAgQm9keSA9PiAoCiAgICAgICAgJ3RoZSBtZXNzYWdlIHRleHQKUGVybCBtb2R1bGVzIHByb3ZpZGUgYSByYW5nZSBvZiBmZWF0dXJlcyB0byBoZWxwIHlvdSBhdm9pZCByZWludmVudGluZyB0aGUgd2hlZWwsIGFuZCBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIENQQU4gKCBodHRwOi8vd3d3LmNwYW4ub3JnLyApLiBBIG51bWJlciBvZiBwb3B1bGFyIG1vZHVsZXMgYXJlIGluY2x1ZGVkIHdpdGggdGhlIFBlcmwgZGlzdHJpYnV0aW9uIGl0c2VsZi4KCkNhdGVnb3JpZXMgb2YgbW9kdWxlcyByYW5nZSBmcm9tIHRleHQgbWFuaXB1bGF0aW9uIHRvIG5ldHdvcmsgcHJvdG9jb2xzIHRvIGRhdGFiYXNlIGludGVncmF0aW9uIHRvIGdyYXBoaWNzLiBBIGNhdGVnb3JpemVkIGxpc3Qgb2YgbW9kdWxlcyBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tIENQQU4uCgpUbyBsZWFybiBob3cgdG8gaW5zdGFsbCBtb2R1bGVzIHlvdSBkb3dubG9hZCBmcm9tIENQQU4sIHJlYWQgcGVybG1vZGluc3RhbGwKClRvIGxlYXJuIGhvdyB0byB1c2UgYSBwYXJ0aWN1bGFyIG1vZHVsZSwgdXNlIHBlcmxkb2MgTW9kdWxlOjpOYW1lIC4gVHlwaWNhbGx5IHlvdSB3aWxsIHdhbnQgdG8gdXNlIE1vZHVsZTo6TmFtZSAsIHdoaWNoIHdpbGwgdGhlbiBnaXZlIHlvdSBhY2Nlc3MgdG8gZXhwb3J0ZWQgZnVuY3Rpb25zIG9yIGFuIE9PIGludGVyZmFjZSB0byB0aGUgbW9kdWxlLgoKcGVybGZhcSBjb250YWlucyBxdWVzdGlvbnMgYW5kIGFuc3dlcnMgcmVsYXRlZCB0byBtYW55IGNvbW1vbiB0YXNrcywgYW5kIG9mdGVuIHByb3ZpZGVzIHN1Z2dlc3Rpb25zIGZvciBnb29kIENQQU4gbW9kdWxlcyB0byB1c2UuCgpwZXJsbW9kIGRlc2NyaWJlcyBQZXJsIG1vZHVsZXMgaW4gZ2VuZXJhbC4gcGVybG1vZGxpYiBsaXN0cyB0aGUgbW9kdWxlcyB3aGljaCBjYW1lIHdpdGggeW91ciBQZXJsIGluc3RhbGxhdGlvbi4KCklmIHlvdSBmZWVsIHRoZSB1cmdlIHRvIHdyaXRlIFBlcmwgbW9kdWxlcywgcGVybG5ld21vZCB3aWxsIGdpdmUgeW91IGdvb2QgYWR2aWNlLgonIHggMjAwCiAgICApLCAgICAjIGNyZWF0ZSBhIHJlYWxseSBiaWcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgMjAwIHRpbWVzCgogICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgSGlzdG9yeVR5cGUgICAgPT4gJ093bmVyVXBkYXRlJywKICAgIEhpc3RvcnlDb21tZW50ID0+ICdTb21lIGZyZWUgdGV4dCEnLAogICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgIE5vQWdlbnROb3RpZnkgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwopOwoKJFNlbGYtPlRydWUoCiAgICAkQXJ0aWNsZUlELAogICAgJ0FydGljbGVDcmVhdGUoKScKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoIFRpY2tldElEID0+ICRUaWNrZXRJRCApLAogICAgMSwKICAgICdBcnRpY2xlQ291bnQnLAopOwoKbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCik7CiRTZWxmLT5UcnVlKAogICAgJEFydGljbGV7RnJvbX0gZXEKICAgICAgICAnU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgJ0FydGljbGVHZXQoKScsCik7Cgpmb3IgbXkgJEtleSAocXcoIEJvZHkgU3ViamVjdCBGcm9tIFRvIFJlcGx5VG8gKSkgewogICAgbXkgJFN1Y2Nlc3MgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVVcGRhdGUoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICBLZXkgICAgICAgPT4gJEtleSwKICAgICAgICBWYWx1ZSAgICAgPT4gIk5ldyAkS2V5IiwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAnQXJ0aWNsZVVwZGF0ZSgpJwogICAgKTsKCiAgICBteSAlQXJ0aWNsZTIgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEFydGljbGUyeyRLZXl9LAogICAgICAgICJOZXcgJEtleSIsCiAgICAgICAgJ0FydGljbGVVcGRhdGUoKScKICAgICk7CgogICAgIyBzZXQgb2xkIHZhbHVlCiAgICAkU3VjY2VzcyA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVVwZGF0ZSgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXskS2V5fSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cn0KCiRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VhcmNoSW5kZXhCdWlsZCgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKbXkgJFRpY2tldFNlYXJjaFRpY2tldE51bWJlciA9IHN1YnN0ciAkVGlja2V0e1RpY2tldE51bWJlcn0sIDAsIDEwOwpteSAlVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0U2VhcmNoVGlja2V0TnVtYmVyIC4gJyUnLCAnJW5vdCBleGlzaXRpbmclJyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyIGFzIEhBU0hSRUYpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIpJywKKTsKCiMgVGVzdCBUaWNrZXROdW1iZXIgc2VhcmNoIGNvbmRpdGlvbiAnMCcsIGV4cGVjdGluZyBubyByZXN1bHRzLCBzZWUgYnVnIzExNDYxLgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gMCwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgISRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIgZXEgMCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaWNrZXRJRCAgID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldElEKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIFRpY2tldElEICAgPT4gWyAkVGlja2V0SUQsIDQyIF0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRJRCBhcyBBUlJBWVJFRiknLAopOwoKbXkgJENvdW50ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdDT1VOVCcsCiAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPklzKAogICAgJENvdW50LAogICAgMSwKICAgICdUaWNrZXRTZWFyY2goKSAoQ09VTlQ6VGlja2V0TnVtYmVyKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICcxMjM0JyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaXRsZSAgICAgID0+ICRUaWNrZXR7VGl0bGV9LAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaXRsZSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaXRsZSAgICAgID0+IFsgJFRpY2tldHtUaXRsZX0sICdTb21lVGl0bGVBQkMnIF0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpdGxlW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBDdXN0b21lcklEID0+ICRUaWNrZXR7Q3VzdG9tZXJJRH0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVySUQpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJJRCA9PiBbICRUaWNrZXR7Q3VzdG9tZXJJRH0sICdMVUxVJyBdLAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDdXN0b21lcklEW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBDdXN0b21lcklEID0+IFsnTFVMVSddLAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVySURbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRpY2tldHtDdXN0b21lclVzZXJ9LAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVyVXNlciknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+IFsgJFRpY2tldHtDdXN0b21lclVzZXJJRH0sICcxMjM0JyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVyVXNlcltBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgICAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICBUaXRsZSAgICAgICAgICAgICA9PiAkVGlja2V0e1RpdGxlfSwKICAgIEN1c3RvbWVySUQgICAgICAgID0+ICRUaWNrZXR7Q3VzdG9tZXJJRH0sCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsVGl0bGUsQ3VzdG9tZXJJRCxDdXN0b21lclVzZXJJRCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciAgICAgID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgVGl0bGUgICAgICAgICAgICAgPT4gWyAkVGlja2V0e1RpdGxlfSwgJzEyMycgXSwKICAgIEN1c3RvbWVySUQgICAgICAgID0+IFsgJFRpY2tldHtDdXN0b21lcklEfSwgJzEyMTM0MjEnIF0sCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiBbICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LCAnaWFkYXNkJyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixUaXRsZSxDdXN0b21lcklELEN1c3RvbWVyVXNlcltBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnQ2xvc2VkJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6Q2xvc2VkKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICdBQkMnIF0sCiAgICBTdGF0ZVR5cGUgICAgPT4gJ09wZW4nLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6T3BlbiknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBNSU1FQmFzZV9Cb2R5ICAgICAgID0+ICd3cml0ZSBwZXJsIG1vZHVsZXMnLAogICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgIFN0YXRlVHlwZSAgICAgICAgICAgPT4gJ0Nsb3NlZCcsCiAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOk1JTUVCYXNlX0JvZHksU3RhdGVUeXBlOkNsb3NlZCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBNSU1FQmFzZV9Cb2R5ICAgICAgID0+ICd3cml0ZSBwZXJsIG1vZHVsZXMnLAogICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgIFN0YXRlVHlwZSAgICAgICAgICAgPT4gJ09wZW4nLAogICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICEkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6TUlNRUJhc2VfLFN0YXRlVHlwZTpPcGVuKScsCik7CgokVGlja2V0T2JqZWN0LT5Nb3ZlVGlja2V0KAogICAgUXVldWUgICAgICAgICAgICAgID0+ICdKdW5rJywKICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJFRpY2tldE9iamVjdC0+TW92ZVRpY2tldCgKICAgIFF1ZXVlICAgICAgICAgICAgICA9PiAnUmF3JywKICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKbXkgJUhEID0gJFRpY2tldE9iamVjdC0+SGlzdG9yeVRpY2tldEdldCgKICAgIFN0b3BZZWFyICA9PiA0MDAwLAogICAgU3RvcE1vbnRoID0+IDEsCiAgICBTdG9wRGF5ICAgPT4gMSwKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBGb3JjZSAgICAgPT4gMSwKKTsKbXkgJFF1ZXVlTG9va3VwSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkSER7UXVldWV9ICk7CiRTZWxmLT5JcygKICAgICRRdWV1ZUxvb2t1cElELAogICAgJEhEe1F1ZXVlSUR9LAogICAgJ0hpc3RvcnlUaWNrZXRHZXQoKSBDaGVjayBoaXN0b3J5IHF1ZXVlJywKKTsKCm15ICRUaWNrZXRNb3ZlID0gJFRpY2tldE9iamVjdC0+TW92ZVRpY2tldCgKICAgIFF1ZXVlICAgICAgICAgICAgICA9PiAnSnVuaycsCiAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0TW92ZSwKICAgICdNb3ZlVGlja2V0KCknLAopOwoKbXkgJFRpY2tldFN0YXRlID0gJFRpY2tldE9iamVjdC0+U3RhdGVTZXQoCiAgICBTdGF0ZSAgICA9PiAnb3BlbicsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRTdGF0ZSwKICAgICdTdGF0ZVNldCgpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnT3BlbicsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsU3RhdGVUeXBlOk9wZW4pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnQ2xvc2VkJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXIsU3RhdGVUeXBlOkNsb3NlZCknLAopOwoKZm9yIG15ICRDb25kaXRpb24gKAogICAgJyhTb21lJiZBZ2VudCknLAogICAgJ1NvbWUmJkFnZW50JywKICAgICcoU29tZStBZ2VudCknLAogICAgJyAoU29tZStBZ2VudCknLAogICAgJyAoU29tZStBZ2VudCkgICcsCiAgICAnU29tZSYmQWdlbnQnLAogICAgJ1NvbWUrQWdlbnQnLAogICAgJyBTb21lK0FnZW50JywKICAgICdTb21lK0FnZW50ICcsCiAgICAnIFNvbWUrQWdlbnQgJywKICAgICcoIVNvbWVXb3JkU2hvdWxkTm90Rm91bmR8fChTb21lK0FnZW50KSknLAogICAgJygoU29tZStBZ2VudCl8fChTb21lQWdlbnROb3RGb3VuZHx8QWdlbnROb3RGb3VuZCkpJywKICAgICciU29tZSBBZ2VudCBTb21lIicsCiAgICAnKCJTb21lIEFnZW50IFNvbWUiKScsCiAgICAnISJTb21lIFNvbWUgQWdlbnQiJywKICAgICcoISJTb21lIFNvbWUgQWdlbnQiKScsCiAgICApCnsKICAgICVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCgogICAgICAgICMgcmVzdWx0IChyZXF1aXJlZCkKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAoKICAgICAgICAjIHJlc3VsdCBsaW1pdAogICAgICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICBNSU1FQmFzZV9Gcm9tICAgICAgID0+ICRDb25kaXRpb24sCiAgICAgICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgICAgIENvbnRlbnRTZWFyY2hQcmVmaXggPT4gJyonLAogICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uICAgICAgICAgID0+ICdydycsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgICAgICJUaWNrZXRTZWFyY2goKSAoSEFTSDpNSU1FQmFzZV9Gcm9tLENvbmRpdGlvbklubGluZSxNSU1FQmFzZV9Gcm9tPSckQ29uZGl0aW9uJykiLAogICAgKTsKfQoKZm9yIG15ICRDb25kaXRpb24gKAogICAgJyhTb21lTm90Rm91bmRXb3JkJiZBZ2VudE5vdEZvdW5kV29yZCknLAogICAgJ1NvbWVOb3RGb3VuZFdvcmR8fEFnZW50Tm90Rm91bmRXb3JkJywKICAgICcgU29tZU5vdEZvdW5kV29yZHx8QWdlbnROb3RGb3VuZFdvcmQnLAogICAgJ1NvbWVOb3RGb3VuZFdvcmQmJkFnZW50Tm90Rm91bmRXb3JkJywKICAgICdTb21lTm90Rm91bmRXb3JkJiZBZ2VudE5vdEZvdW5kV29yZCAgJywKICAgICcoU29tZU5vdEZvdW5kV29yZCBBZ2VudE5vdEZvdW5kV29yZCknLAogICAgJ1NvbWVOb3RGb3VuZFdvcmQmJkFnZW50Tm90Rm91bmRXb3JkJywKICAgICcoU29tZVdvcmRTaG91bGROb3RGb3VuZHx8KCFTb21lKyFBZ2VudCkpJywKICAgICcoKFNvbWVOb3RGb3VuZCYmQWdlbnQpfHwoU29tZUFnZW50Tm90Rm91bmR8fEFnZW50Tm90Rm91bmQpKScsCiAgICAnISJTb21lIEFnZW50IFNvbWUiJywKICAgICcoISJTb21lIEFnZW50IFNvbWUiKScsCiAgICAnIlNvbWUgU29tZSBBZ2VudCInLAogICAgJygiU29tZSBTb21lIEFnZW50IiknLAogICAgKQp7CiAgICAlVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAoKICAgICAgICAjIHJlc3VsdCAocmVxdWlyZWQpCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKCiAgICAgICAgIyByZXN1bHQgbGltaXQKICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgTUlNRUJhc2VfRnJvbSAgICAgICA9PiAkQ29uZGl0aW9uLAogICAgICAgIENvbmRpdGlvbklubGluZSAgICAgPT4gMSwKICAgICAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICBDb250ZW50U2VhcmNoU3VmZml4ID0+ICcqJywKICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgUGVybWlzc2lvbiAgICAgICAgICA9PiAncncnLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAoICEkVGlja2V0SURzeyRUaWNrZXRJRH0gKSwKICAgICAgICAiVGlja2V0U2VhcmNoKCkgKEhBU0g6TUlNRUJhc2VfRnJvbSxDb25kaXRpb25JbmxpbmUsTUlNRUJhc2VfRnJvbT0nJENvbmRpdGlvbicpIiwKICAgICk7Cn0KCm15ICRUaWNrZXRQcmlvcml0eSA9ICRUaWNrZXRPYmplY3QtPlByaW9yaXR5U2V0KAogICAgUHJpb3JpdHkgPT4gJzIgbG93JywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFByaW9yaXR5LAogICAgJ1ByaW9yaXR5U2V0KCknLAopOwoKIyBnZXQgdGlja2V0IGRhdGEKbXkgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKbXkgJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCm15ICRUaWNrZXRUaXRsZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFRpdGxlVXBkYXRlKAogICAgVGl0bGUgPT4gJ1ZlcnkgbG9uZyB0aXRsZSAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScKICAgICAgICAuICcwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRUaXRsZSwKICAgICdUaWNrZXRUaXRsZVVwZGF0ZSgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRUaXRsZVVwZGF0ZSgpJywKKTsKCiMgY2hlY2sgaWYgd2UgaGF2ZSBhIFRpY2tldCBUaXRsZSBVcGRhdGUgaGlzdG9yeSByZWNvcmQKbXkgQEhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwpteSAkSGlzdG9yeUl0ZW0gPSBwb3AgQEhpc3RvcnlMaW5lczsKJFNlbGYtPklzKAogICAgJEhpc3RvcnlJdGVtLT57SGlzdG9yeVR5cGV9LAogICAgJ1RpdGxlVXBkYXRlJywKICAgICJUaWNrZXRUaXRsZVVwZGF0ZSAtIGZvdW5kIEhpc3RvcnlJdGVtIiwKKTsKCiRTZWxmLT5JcygKICAgICRIaXN0b3J5SXRlbS0+e05hbWV9LAogICAgJyUlU29tZSBUaWNrZXRfVGl0bGUlJVZlcnkgbG9uZyB0aXRsZSAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLi4uJywKICAgICJUaWNrZXRUaXRsZVVwZGF0ZSAtIEZvdW5kIG5ldyB0aXRsZSIsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2F2ZSBjdXJyZW50IGNoYW5nZV90aW1lCiRDaGFuZ2VUaW1lID0gJFRpY2tldERhdGF7Q2hhbmdlZH07CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgojIHNldCB1bmxvY2sgdGltZW91dApteSAkVW5sb2NrVGltZW91dCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFVubG9ja1RpbWVvdXRVcGRhdGUoCiAgICBVbmxvY2tUaW1lb3V0ID0+ICREYXRlVGltZU9iamVjdC0+VG9FcG9jaCgpICsgMTAwMDAsCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFVubG9ja1RpbWVvdXQsCiAgICAnVGlja2V0VW5sb2NrVGltZW91dFVwZGF0ZSgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRVbmxvY2tUaW1lb3V0VXBkYXRlKCknLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgc2F2ZSBjdXJyZW50IHF1ZXVlCm15ICRDdXJyZW50UXVldWVJRCA9ICRUaWNrZXREYXRhe1F1ZXVlSUR9OwoKIyB3YWl0IDUgc2Vjb25kcwokSGVscGVyLT5GaXhlZFRpbWVBZGRTZWNvbmRzKDUpOwoKbXkgJE5ld1F1ZXVlID0gJEN1cnJlbnRRdWV1ZUlEICE9IDEgPyAxIDogMjsKCiMgc2V0IHF1ZXVlCm15ICRUaWNrZXRRdWV1ZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFF1ZXVlU2V0KAogICAgUXVldWVJRCAgPT4gJE5ld1F1ZXVlLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFF1ZXVlU2V0LAogICAgJ1RpY2tldFF1ZXVlU2V0KCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFF1ZXVlU2V0KCknLAopOwoKIyByZXN0b3JlIHF1ZXVlCiRUaWNrZXRRdWV1ZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFF1ZXVlU2V0KAogICAgUXVldWVJRCAgPT4gJEN1cnJlbnRRdWV1ZUlELAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2F2ZSBjdXJyZW50IGNoYW5nZV90aW1lCiRDaGFuZ2VUaW1lID0gJFRpY2tldERhdGF7Q2hhbmdlZH07CgojIHNhdmUgY3VycmVudCB0eXBlCm15ICRDdXJyZW50VGlja2V0VHlwZSA9ICRUaWNrZXREYXRhe1R5cGVJRH07CgojIHdhaXQgNSBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgojIGNyZWF0ZSBhIHRlc3QgdHlwZQpteSAkVHlwZUlEID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICdUeXBlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNldCB0eXBlCm15ICRUaWNrZXRUeXBlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZVNldCgKICAgIFR5cGVJRCAgID0+ICRUeXBlSUQsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0VHlwZVNldCwKICAgICdUaWNrZXRUeXBlU2V0KCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFR5cGVTZXQoKScsCik7CgojIHJlc3RvcmUgdHlwZQokVGlja2V0VHlwZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFR5cGVTZXQoCiAgICBUeXBlSUQgICA9PiAkQ3VycmVudFRpY2tldFR5cGUsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzZXQgYXMgaW52YWxpZCB0aGUgdGVzdCB0eXBlCiRUeXBlT2JqZWN0LT5UeXBlVXBkYXRlKAogICAgSUQgICAgICA9PiAkVHlwZUlELAogICAgTmFtZSAgICA9PiAnVHlwZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgVmFsaWRJRCA9PiAyLAogICAgVXNlcklEICA9PiAxLAopOwojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNlcnZpY2VUeXBlTGlzdCB9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNMQVR5cGVMaXN0IH07CiMgLS0tCgojIGNyZWF0ZSBhIHRlc3Qgc2VydmljZQpteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICdTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgd2FpdCAxIHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcygxKTsKCiMgc2V0IHR5cGUKbXkgJFRpY2tldFNlcnZpY2VTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlU2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRTZXJ2aWNlU2V0LAogICAgJ1RpY2tldFNlcnZpY2VTZXQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0U2VydmljZVNldCgpJywKKTsKCiMgc2V0IGFzIGludmFsaWQgdGhlIHRlc3Qgc2VydmljZQokU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgTmFtZSAgICAgID0+ICdTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEICAgPT4gMiwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgd2FpdCA1IHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCm15ICRUaWNrZXRFc2NhbGF0aW9uSW5kZXhCdWlsZCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkLAogICAgJ1RpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKCknLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgY3JlYXRlIGEgdGVzdCBTTEEKbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgTmFtZSAgICA9PiAnU0xBJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAojIC0tLQogICAgVXNlcklEICA9PiAxLAopOwoKIyB3YWl0IDUgc2Vjb25kcwokSGVscGVyLT5GaXhlZFRpbWVBZGRTZWNvbmRzKDUpOwoKIyBzZXQgU0xBCm15ICRUaWNrZXRTTEFTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTTEFTZXQoCiAgICBTTEFJRCAgICA9PiAkU0xBSUQsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0U0xBU2V0LAogICAgJ1RpY2tldFNMQVNldCgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRTTEFTZXQoKScsCik7CgojIHNldCBhcyBpbnZhbGlkIHRoZSB0ZXN0IFNMQQokU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICBTTEFJRCAgID0+ICRTTEFJRCwKICAgIE5hbWUgICAgPT4gJ1NMQScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgVmFsaWRJRCA9PiAxLAogICAgQ29tbWVudCA9PiAnVW5pdCBUZXN0IENvbW1lbnQnLAogICAgVXNlcklEICA9PiAxLAopOwoKbXkgJFRpY2tldExvY2sgPSAkVGlja2V0T2JqZWN0LT5Mb2NrU2V0KAogICAgTG9jayAgICAgICAgICAgICAgID0+ICdsb2NrJywKICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRMb2NrLAogICAgJ0xvY2tTZXQoKScsCik7CgojIFRlc3QgQ3JlYXRlZFVzZXJJRHMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRVc2VySURzID0+IFsgMSwgNDU1LCAzMiBdLAogICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRVc2VySURzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRQcmlvcml0aWVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUHJpb3JpdGllcyA9PiBbICcyIGxvdycsICczIG5vcm1hbCcgXSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkUHJpb3JpdGllc1tBcnJheV0pJywKKTsKCiMgVGVzdCBDcmVhdGVkUHJpb3JpdHlJRHMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgPT4gMTAwLAogICAgQ3JlYXRlZFByaW9yaXR5SURzID0+IFsgMiwgMyBdLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFByaW9yaXR5SURzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRTdGF0ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkU3RhdGVzID0+IFsnY2xvc2VkIHN1Y2Nlc3NmdWwnXSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFN0YXRlc1tBcnJheV0pJywKKTsKCiMgVGVzdCBDcmVhdGVkU3RhdGVJRHMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgPT4gMTAwLAogICAgQ3JlYXRlZFN0YXRlSURzID0+IFsyXSwKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRTdGF0ZUlEc1tBcnJheV0pJywKKTsKCiMgVGVzdCBDcmVhdGVkUXVldWVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgPT4gMTAwLAogICAgQ3JlYXRlZFF1ZXVlcyA9PiBbJ1JhdyddLAogICAgVXNlcklEICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkUXVldWVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRRdWV1ZUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUXVldWVJRHMgPT4gWyAyLCAzIF0sCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkUXVldWVJRHNbQXJyYXldKScsCik7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TGFzdENoYW5nZVRpbWVOZXdlck1pbnV0ZXMgPT4gNjApJywKKTsKCiMgVGVzdCBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6QXJ0aWNsZUNyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDcmVhdGVPbGRlck1pbnV0ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU9sZGVyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VPbGRlck1pbnV0ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldExhc3RDaGFuZ2VUaW1lT2xkZXJNaW51dGVzID0+IDYwLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU9sZGVyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IEFydGljbGVDcmVhdGVPbGRlck1pbnV0ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIEFydGljbGVDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU9sZGVyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUKbXkgJFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKJFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUtPlN1YnRyYWN0KCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZQpteSAkVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKJFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlLT5TdWJ0cmFjdCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICRUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlCm15ICRBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUtPlN1YnRyYWN0KCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlLT5Ub1N0cmluZygpLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0TGFzdENoYW5nZU9sZGVyRGF0ZQpteSAkVGlja2V0TGFzdENoYW5nZU9sZGVyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0TGFzdENoYW5nZU9sZGVyRGF0ZS0+U3VidHJhY3QoIEhvdXJzID0+IDEgKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAkVGlja2V0TGFzdENoYW5nZU9sZGVyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TGFzdENoYW5nZVRpbWVPbGRlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDcmVhdGVPbGRlckRhdGUKbXkgJFRpY2tldENyZWF0ZU9sZGVyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0Q3JlYXRlT2xkZXJEYXRlLT5TdWJ0cmFjdCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDcmVhdGVUaW1lT2xkZXJEYXRlID0+ICRUaWNrZXRDcmVhdGVPbGRlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lT2xkZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZU9sZGVyRGF0ZQpteSAkQXJ0aWNsZUNyZWF0ZU9sZGVyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokQXJ0aWNsZUNyZWF0ZU9sZGVyRGF0ZS0+U3VidHJhY3QoIEhvdXJzID0+IDEgKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBBcnRpY2xlQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAkQXJ0aWNsZUNyZWF0ZU9sZGVyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6QXJ0aWNsZUNyZWF0ZVRpbWVPbGRlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUKbXkgJFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0Q2xvc2VUaW1lTmV3ZXJEYXRlLT5TdWJ0cmFjdCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q2xvc2VUaW1lTmV3ZXJEYXRlID0+ICRUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDbG9zZU9sZGVyRGF0ZQpteSAkVGlja2V0Q2xvc2VPbGRlckRhdGUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKJFRpY2tldENsb3NlT2xkZXJEYXRlLT5TdWJ0cmFjdCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q2xvc2VUaW1lT2xkZXJEYXRlID0+ICRUaWNrZXRDbG9zZU9sZGVyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDbG9zZVRpbWVPbGRlckRhdGUgPT4gNjApJywKKTsKCm15ICVUaWNrZXQyID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7VGl0bGV9LAogICAgJ1ZlcnkgbG9uZyB0aXRsZSAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScKICAgICAgICAuICcwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScsCiAgICAnVGlja2V0R2V0KCkgKFRpdGxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXQye1F1ZXVlfSwKICAgICdKdW5rJywKICAgICdUaWNrZXRHZXQoKSAoUXVldWUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7UHJpb3JpdHl9LAogICAgJzIgbG93JywKICAgICdUaWNrZXRHZXQoKSAoUHJpb3JpdHkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7U3RhdGV9LAogICAgJ29wZW4nLAogICAgJ1RpY2tldEdldCgpIChTdGF0ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntMb2NrfSwKICAgICdsb2NrJywKICAgICdUaWNrZXRHZXQoKSAoTG9jayknLAopOwoKbXkgQE1vdmVRdWV1ZUxpc3QgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlUXVldWVMaXN0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVHlwZSAgICAgPT4gJ05hbWUnLAopOwoKJFNlbGYtPklzKAogICAgJE1vdmVRdWV1ZUxpc3RbMF0sCiAgICAnUmF3JywKICAgICdNb3ZlUXVldWVMaXN0KCkgKFJhdyknLAopOwokU2VsZi0+SXMoCiAgICAkTW92ZVF1ZXVlTGlzdFstMV0sCiAgICAnSnVuaycsCiAgICAnTW92ZVF1ZXVlTGlzdCgpIChKdW5rKScsCik7CgpteSAkVGlja2V0QWNjb3VudFRpbWUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFRpbWVVbml0ICA9PiAnNC41JywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUsCiAgICAnVGlja2V0QWNjb3VudFRpbWUoKSAxJywKKTsKCm15ICRUaWNrZXRBY2NvdW50VGltZTIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFRpbWVVbml0ICA9PiAnNDEyMy41MycsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldEFjY291bnRUaW1lMiwKICAgICdUaWNrZXRBY2NvdW50VGltZSgpIDInLAopOwoKbXkgJFRpY2tldEFjY291bnRUaW1lMyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgVGltZVVuaXQgID0+ICc0LDUzJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUzLAogICAgJ1RpY2tldEFjY291bnRUaW1lKCkgMycsCik7CgpteSAkQWNjb3VudGVkVGltZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRlZFRpbWVHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwoKJFNlbGYtPklzKAogICAgJEFjY291bnRlZFRpbWUsCiAgICA0MTMyLjU2LAogICAgJ1RpY2tldEFjY291bnRlZFRpbWVHZXQoKScsCik7CgpteSAkQWNjb3VudGVkVGltZTIgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKKTsKCiRTZWxmLT5JcygKICAgICRBY2NvdW50ZWRUaW1lMiwKICAgIDQxMzIuNTYsCiAgICAnQXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoKScKKTsKCm15ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RhcnRPYmogICAgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKbXkgJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdGFydFZhbHVlcyA9ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RhcnRPYmotPkdldCgpOwoKbXkgJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdG9wT2JqID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RvcE9iai0+U3VidHJhY3QoIERheXMgPT4gMSApOwpteSAkSGlzdG9yeVRpY2tldFN0YXR1c0dldFN0b3BWYWx1ZXMgPSAkSGlzdG9yeVRpY2tldFN0YXR1c0dldFN0b3BPYmotPkdldCgpOwoKbXkgJVRpY2tldFN0YXR1cyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoCiAgICBTdG9wWWVhciAgID0+ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RhcnRWYWx1ZXMtPntZZWFyfSwKICAgIFN0b3BNb250aCAgPT4gJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdGFydFZhbHVlcy0+e01vbnRofSwKICAgIFN0b3BEYXkgICAgPT4gJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdGFydFZhbHVlcy0+e0RheX0sCiAgICBTdGFydFllYXIgID0+ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RvcFZhbHVlcy0+e1llYXJ9LAogICAgU3RhcnRNb250aCA9PiAkSGlzdG9yeVRpY2tldFN0YXR1c0dldFN0b3BWYWx1ZXMtPntNb250aH0sCiAgICBTdGFydERheSAgID0+ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RvcFZhbHVlcy0+e0RheX0sCik7CgppZiAoICRUaWNrZXRTdGF0dXN7JFRpY2tldElEfSApIHsKICAgIG15ICVUaWNrZXRIaXN0b3J5ID0gJXsgJFRpY2tldFN0YXR1c3skVGlja2V0SUR9IH07CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7VGlja2V0TnVtYmVyfSwKICAgICAgICAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoVGlja2V0TnVtYmVyKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1RpY2tldElEfSwKICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoVGlja2V0SUQpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7Q3JlYXRlVXNlcklEfSwKICAgICAgICAxLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVVzZXJJRCkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtRdWV1ZX0sCiAgICAgICAgJ0p1bmsnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFF1ZXVlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVF1ZXVlfSwKICAgICAgICAnUmF3JywKICAgICAgICAiSGlzdG9yeVRpY2tldFN0YXR1c0dldCgpIChDcmVhdGVRdWV1ZSkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtTdGF0ZX0sCiAgICAgICAgJ29wZW4nLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFN0YXRlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVN0YXRlfSwKICAgICAgICAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVN0YXRlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1ByaW9yaXR5fSwKICAgICAgICAnMiBsb3cnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFByaW9yaXR5KSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVByaW9yaXR5fSwKICAgICAgICAnMyBub3JtYWwnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVByaW9yaXR5KSIsCiAgICApOwoKfQplbHNlIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgJ0hpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKScsCiAgICApOwp9CgpteSAkRGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRGVsZXRlLAogICAgJ1RpY2tldERlbGV0ZSgpJywKKTsKCm15ICREZWxldGVDaGVjayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkRGVsZXRlQ2hlY2ssCiAgICAnVGlja2V0RGVsZXRlKCkgd29ya2VkJywKKTsKCm15ICRDdXN0b21lck5vID0gJ0N1c3RvbWVyTm8nIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgdGlja2V0IHNlYXJjaCBzb3J0L29yZGVyIHRlc3QKbXkgJFRpY2tldElEU29ydE9yZGVyMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUgLSB0aWNrZXQgc29ydC9vcmRlciBieSB0ZXN0cycsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCm15ICVUaWNrZXRDcmVhdGVkID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEU29ydE9yZGVyMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHdhaXQgMiBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXIyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgd2FpdCAyIHNlY29uZHMKJEhlbHBlci0+Rml4ZWRUaW1lQWRkU2Vjb25kcygyKTsKCm15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICBTdGF0ZSAgICA9PiAnb3BlbicsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgVXNlcklEICAgPT4gMSwKKTsKCm15ICVUaWNrZXRVcGRhdGVkID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEU29ydE9yZGVyMSwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXNOb3QoCiAgICAkVGlja2V0Q3JlYXRlZHtDaGFuZ2VkfSwKICAgICRUaWNrZXRVcGRhdGVke0NoYW5nZWR9LAogICAgJ1RpY2tldFVwZGF0ZWQgZm9yIHNvcnQgLSBjaGFuZ2UgdGltZSB3YXMgdXBkYXRlZCcKICAgICAgICAuICIgJFRpY2tldENyZWF0ZWR7Q2hhbmdlZH0gbmUgJFRpY2tldFVwZGF0ZWR7Q2hhbmdlZH0iLAopOwoKIyBmaW5kIG5ld2VzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpteSBAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdVcCcgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdQcmlvcml0eScsICdBZ2UnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoUHJpb3JpdHkgKERvd24pLCBBZ2UgKFVwKSknLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChEb3duKSwgQWdlIChEb3duKSknLAopOwoKIyBmaW5kIGxhc3QgbW9kaWZpZWQgdGlja2V0IGJ5IGNoYW5nZWQgdGltZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsIF0sCiAgICBTb3J0QnkgICAgICAgPT4gWydDaGFuZ2VkJ10sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyMSwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChDaGFuZ2VkIChEb3duKSknCiAgICAgICAgLiAiJFRpY2tldElEc1NvcnRPcmRlclswXSBpbnN0ZWFkIG9mICRUaWNrZXRJRFNvcnRPcmRlcjEiLAopOwoKIyBmaW5kIG9sZGVzdCBtb2RpZmllZCBieSBjaGFuZ2VkIHRpbWUKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3JkZXJCeSAgICAgID0+IFsgJ1VwJywgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdDaGFuZ2VkJywgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKENoYW5nZWQgKFVwKSkpJwogICAgICAgIC4gIiRUaWNrZXRJRHNTb3J0T3JkZXJbMF0gIGluc3RlYWQgb2YgJFRpY2tldElEU29ydE9yZGVyMiIsCik7CgpteSAkVGlja2V0SURTb3J0T3JkZXIzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHdhaXQgMiBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXI0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHdhaXQgMiBzZWNvbmRzCiRIZWxwZXItPkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXI1ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzNSAod2l0aCBvdGhlciBxdWV1ZSknLAogICAgUXVldWUgICAgICAgID0+ICdNaXNjJywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICduZXcnLAogICAgQ3VzdG9tZXJObyAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXI0LAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChEb3duKSwgQWdlIChEb3duKSknLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQgYnkgcHJpb3JpdHksIGFnZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnVXAnLCAnRG93bicgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdQcmlvcml0eScsICdBZ2UnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyMiwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChQcmlvcml0eSAoVXApLCBBZ2UgKERvd24pKScsCik7CgojIGZpbmQgbmV3ZXN0IHRpY2tldApAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBPcmRlckJ5ICAgICAgPT4gJ0Rvd24nLAogICAgU29ydEJ5ICAgICAgID0+ICdBZ2UnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjQsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoQWdlIChEb3duKSknLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3JkZXJCeSAgICAgID0+ICdVcCcsCiAgICBTb3J0QnkgICAgICAgPT4gJ0FnZScsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyMSwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChBZ2UgKFVwKSknLAopOwoKIyBzb3J0IGJ5IHRpY2tldCBxdWV1ZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbICdNaXNjJywgJ1JhdycgXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgT3JkZXJCeSAgICAgID0+ICdVcCcsCiAgICBTb3J0QnkgICAgICAgPT4gJ1F1ZXVlJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXI1LAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFF1ZXVlIChVcCkpJywKKTsKCiRDb3VudCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQ09VTlQnLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3Rycy5jb20nLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJENvdW50LAogICAgNCwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBjb3VudCBmb3IgY3JlYXRlZCB0aWNrZXRzJywKKTsKCmZvciBteSAkVGlja2V0SUREZWxldGUgKAogICAgJFRpY2tldElEU29ydE9yZGVyMSwgJFRpY2tldElEU29ydE9yZGVyMiwgJFRpY2tldElEU29ydE9yZGVyMywKICAgICRUaWNrZXRJRFNvcnRPcmRlcjQKICAgICkKewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUREZWxldGUsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKSwKICAgICAgICAiVGlja2V0RGVsZXRlKCkiLAogICAgKTsKfQoKIyBhdm9pZCBTdGF0ZVR5cGUgYW5kIFN0YXRlVHlwZUlEIHByb2JsZW1zIGluIFRpY2tldFNlYXJjaCgpCgpteSAlU3RhdGVUeXBlTGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyB5b3UgbmVlZCBhIGhhc2ggd2l0aCB0aGUgc3RhdGUgYXMga2V5IGFuZCB0aGUgcmVsYXRlZCBTdGF0ZVR5cGUgYW5kIFN0YXRlVHlwZUlEIGFzCiMgcmVmZXJlbmNlCm15ICVTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZTsKZm9yIG15ICRTdGF0ZVR5cGVJRCAoIHNvcnQga2V5cyAlU3RhdGVUeXBlTGlzdCApIHsKICAgIG15IEBMaXN0ID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldFN0YXRlc0J5VHlwZSgKICAgICAgICBTdGF0ZVR5cGUgPT4gWyAkU3RhdGVUeXBlTGlzdHskU3RhdGVUeXBlSUR9IF0sCiAgICAgICAgUmVzdWx0ICAgID0+ICdOYW1lJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSEFTSHxJRHxOYW1lCiAgICApOwogICAgZm9yIG15ICRJbmRleCAoQExpc3QpIHsKICAgICAgICAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JEluZGV4fS0+e05hbWV9ID0gJFN0YXRlVHlwZUxpc3R7JFN0YXRlVHlwZUlEfTsKICAgICAgICAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JEluZGV4fS0+e0lEfSAgID0gJFN0YXRlVHlwZUlEOwogICAgfQp9CgojIHRvIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBhIHJlc3VsdCB0aWNrZXQgY3JlYXRlIG9uZQokVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1N0YXRlVHlwZVRlc3QnLAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90cnMuY29tJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgpteSAlU3RhdGVMaXN0ID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUxpc3QoIFVzZXJJRCA9PiAxICk7CgojIG5vdyBjaGVjayBldmVyeSBwb3NzaWJsZSBzdGF0ZQpmb3IgbXkgJFN0YXRlICggdmFsdWVzICVTdGF0ZUxpc3QgKSB7CiAgICAkVGlja2V0T2JqZWN0LT5TdGF0ZVNldCgKICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgPT4gJFN0YXRlLAogICAgICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIG15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICAgICAgVGl0bGUgICAgICAgID0+ICclU3RhdGVUeXBlVGVzdCUnLAogICAgICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgICAgIFN0YXRlVHlwZUlEcyA9PiBbICRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57SUR9IF0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG15IEBUaWNrZXRJRHNUeXBlID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIFJlc3VsdCAgICA9PiAnQVJSQVknLAogICAgICAgIFRpdGxlICAgICA9PiAnJVN0YXRlVHlwZVRlc3QlJywKICAgICAgICBRdWV1ZXMgICAgPT4gWydSYXcnXSwKICAgICAgICBTdGF0ZVR5cGUgPT4gWyAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JFN0YXRlfS0+e05hbWV9IF0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIGlmICggJFRpY2tldElEc1swXSApIHsKICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURzWzBdLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiB0aGVyZSBpcyBubyByZXN1bHQgdGhlIFN0YXRlVHlwZUlEIGhhc24ndCB3b3JrZWQKICAgICMgVGVzdCBpZiB0aGVyZSBpcyBhIHJlc3VsdCwgaWYgSSB1c2UgU3RhdGVUeXBlSUQgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntJRH0KICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRJRHNbMF0sCiAgICAgICAgIlRpY2tldFNlYXJjaCgpIC0gU3RhdGVUeXBlSUQgLSBmb3VuZCB0aWNrZXQiLAogICAgKTsKCiMgaWYgaXQgaXMgbm90IGVxdWFsIHRoZW4gdGhlcmUgaXMgaW4gdGhlIHVzaW5nIG9mIFN0YXRlVHlwZSBvciBTdGF0ZVR5cGVJRCBhbiBlcnJvcgojIGNoZWNrIGlmIHlvdSBnZXQgdGhlIHNhbWUgcmVzdWx0IGlmIHlvdSB1c2UgdGhlIFN0YXRlVHlwZSBhdHRyaWJ1dGUgb3IgdGhlIFN0YXRlVHlwZUlEcyBhdHRyaWJ1dGUuCiMgU3RhdGUoJFN0YXRlKSBTdGF0ZVR5cGUoJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntOYW1lfSkgYW5kIFN0YXRlVHlwZUlEcygkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JFN0YXRlfS0+e0lEfSkKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQFRpY2tldElEcywKICAgICAgICBzY2FsYXIgQFRpY2tldElEc1R5cGUsCiAgICAgICAgIlRpY2tldFNlYXJjaCgpIC0gU3RhdGVUeXBlIiwKICAgICk7Cn0KCm15ICVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnMCcsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIG5vdCBzZXQiLAopOwoKbXkgJERpZmYgICAgICAgICAgICAgICA9IDYwOwpteSAkQ3VycmVudFN5c3RlbVRpbWUgID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKTsKbXkgJFBlbmRpbmdUaW1lU2V0RGlmZiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgRGlmZiAgICAgPT4gJERpZmYsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXREaWZmLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQgZGlmZiIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tSZWFsVGlsbFRpbWVOb3RVc2VkfSwKICAgICRDdXJyZW50U3lzdGVtVGltZSArICREaWZmICogNjAsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIGRpZmYgdGltZSBjaGVjayIsCik7CgpteSAkUGVuZGluZ1RpbWVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCiAgICBZZWFyICAgICA9PiAnMjAwMycsCiAgICBNb250aCAgICA9PiAnMDgnLAogICAgRGF5ICAgICAgPT4gJzE0JywKICAgIEhvdXIgICAgID0+ICcyMicsCiAgICBNaW51dGUgICA9PiAnMDUnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHNldCIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgpteSAkUGVuZGluZ1VudGlsVGltZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgWWVhciAgID0+ICcyMDAzJywKICAgICAgICBNb250aCAgPT4gJzA4JywKICAgICAgICBEYXkgICAgPT4gJzE0JywKICAgICAgICBIb3VyICAgPT4gJzIyJywKICAgICAgICBNaW51dGUgPT4gJzA1JywKICAgICAgICBTZWNvbmQgPT4gJzAwJywKICAgICAgICB9CiktPlRvRXBvY2goKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKSAtICRQZW5kaW5nVW50aWxUaW1lOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICctJyAuICRQZW5kaW5nVW50aWxUaW1lLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZWFkIGJhY2siLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgWWVhciAgICAgPT4gJzAnLAogICAgTW9udGggICAgPT4gJzAnLAogICAgRGF5ICAgICAgPT4gJzAnLAogICAgSG91ciAgICAgPT4gJzAnLAogICAgTWludXRlICAgPT4gJzAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHJlc2V0IiwKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnMCcsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIG5vdCBzZXQiLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgU3RyaW5nICAgPT4gJzIwMDMtMDktMTQgMjI6MDU6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHNldCBzdHJpbmciLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFBlbmRpbmdVbnRpbFRpbWUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgIFN0cmluZyA9PiAnMjAwMy0wOS0xNCAyMjowNTowMCcsCiAgICAgICAgfQopLT5Ub0Vwb2NoKCk7CgokUGVuZGluZ1VudGlsVGltZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCkgLSAkUGVuZGluZ1VudGlsVGltZTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnLScgLiAkUGVuZGluZ1VudGlsVGltZSwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gcmVhZCBiYWNrIiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0cmluZyAgID0+ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZXNldCBzdHJpbmciLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICcwJywKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gbm90IHNldCIsCik7CgokUGVuZGluZ1RpbWVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCiAgICBTdHJpbmcgICA9PiAnMjAwMy0wOS0xNCAyMjowNTowMCcsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRQZW5kaW5nVGltZVNldCwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gc2V0IHN0cmluZyIsCik7CgpteSAkVGlja2V0U3RhdGVVcGRhdGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCiAgICBTdGF0ZSAgICA9PiAncGVuZGluZyByZW1pbmRlcicsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFNldCB0byBwZW5kaW5nIC0gdGltZSBzaG91bGQgc3RpbGwgYmUgdGhlcmUiLAopOwoKJFRpY2tldFN0YXRlVXBkYXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgU3RhdGUgICAgPT4gJ25ldycsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBTZXQgdG8gbmV3IC0gUGVuZGluZyBUaW1lIG5vdCBzZXQiLAopOwoKIyBjaGVjayB0aGF0IHNlYXJjaGVzIHdpdGggTmV3ZXJEYXRlIGluIHRoZSBmdXR1cmUgYXJlIG5vdCBleGVjdXRlZAokSGVscGVyLT5GaXhlZFRpbWVBZGRTZWNvbmRzKCAtNjAgKiA2MCApOwoKIyBUZXN0IFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQokVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZS0+QWRkKCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlID0+IC02MCknLAopOwoKIyBUZXN0IEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlIChmdXR1cmUgZGF0ZSkKJEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZS0+QWRkKCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlLT5Ub1N0cmluZygpLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAtNjApJywKKTsKCiMgVGVzdCBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQokVGlja2V0Q2xvc2VUaW1lTmV3ZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUtPkFkZCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q2xvc2VUaW1lTmV3ZXJEYXRlID0+ICRUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q2xvc2VUaW1lTmV3ZXJEYXRlID0+IC02MCknLAopOwoKIyB0aGUgdGlja2V0IGlzIG5vIGxvbmdlciBuZWVkZWQKJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgdGVzdHMgZm9yIHNlYXJjaGluZyBTdGF0ZVR5cGVzIHRoYXQgbWlnaHQgbm90IGhhdmUgc3RhdGVzCiMgdGhpcyBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGxpc3QgcmF0aGVyIHRoZW4gYSBiaWcgU1FMIGVycm9yCiMgdGhlIHByb2JsZW0gaXMsIHdlIGNhbid0IHJlYWxseSB0ZXN0IGlmIHRoZXJlIGlzIGFuIFNRTCBlcnJvciBvciBub3QKIyB0aWNrZXQgc2VhcmNoIHJldHVybnMgYW4gZW1wdHkgbGlzdCBhbnl3YXkKCm15IEBOZXdTdGF0ZXMgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0U3RhdGVzQnlUeXBlKAogICAgU3RhdGVUeXBlID0+IFsnbmV3J10sCiAgICBSZXN1bHQgICAgPT4gJ0lEJywKKTsKCiMgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgdmFsaWQgc3RhdGVzIGZvciBzdGF0ZSB0eXBlIG5ldwpmb3IgbXkgJE5ld1N0YXRlSUQgKEBOZXdTdGF0ZXMpIHsKICAgIG15ICVTdGF0ZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgSUQgPT4gJE5ld1N0YXRlSUQsCiAgICApOwogICAgJFN0YXRlT2JqZWN0LT5TdGF0ZVVwZGF0ZSgKICAgICAgICAlU3RhdGUsCiAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cn0KCm15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0xJU1QnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnTmV3JywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHNbMF0sCiAgICAnVGlja2V0U2VhcmNoKCkgKExJU1Q6VGlja2V0TnVtYmVyLFN0YXRlVHlwZTpuZXcgKG5vIHZhbGlkIHN0YXRlcyBvZiBzdGF0ZSB0eXBlIG5ldyknLAopOwoKIyBhY3RpdmF0ZSBzdGF0ZXMgYWdhaW4KZm9yIG15ICROZXdTdGF0ZUlEIChATmV3U3RhdGVzKSB7CiAgICBteSAlU3RhdGUgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgICAgIElEID0+ICROZXdTdGF0ZUlELAogICAgKTsKICAgICRTdGF0ZU9iamVjdC0+U3RhdGVVcGRhdGUoCiAgICAgICAgJVN0YXRlLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwp9CgojIGNoZWNrIHJlc3BvbnNlIG9mIHRpY2tldCBzZWFyY2ggZm9yIGludmFsaWQgdGltZXN0YW1wcwpmb3IgbXkgJFNlYXJjaFBhcmFtIChxdyhBcnRpY2xlQ3JlYXRlVGltZSBUaWNrZXRDcmVhdGVUaW1lIFRpY2tldFBlbmRpbmdUaW1lKSkgewogICAgZm9yIG15ICRQYXJhbU9wdGlvbiAocXcoT2xkZXJEYXRlIE5ld2VyRGF0ZSkpIHsKICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgICRTZWFyY2hQYXJhbSAuICRQYXJhbU9wdGlvbiA9PiAnMjAwMC0wMi0zMSAwMDowMDowMCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJEVycm9yTWVzc2FnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgIFR5cGUgPT4gJ2Vycm9yJywKICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UsCiAgICAgICAgICAgICJTZWFyY2ggbm90IGV4ZWN1dGVkIGR1ZSB0byBpbnZhbGlkIHRpbWUgJzIwMDAtMDItMzEgMDA6MDA6MDAnISIsCiAgICAgICAgICAgICJUaWNrZXRTZWFyY2goKSAoSGFuZGxpbmcgaW52YWxpZCB0aW1lc3RhbXAgaW4gJyRTZWFyY2hQYXJhbSRQYXJhbU9wdGlvbicpIiwKICAgICAgICApOwogICAgfQp9CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UgYnV0IHdlIG5lZWQgdG8gZGVsZXRlIHRoZSB0aWNrZXRzIHRvIGNsZWFudXAgdGhlIGZpbGVzeXN0ZW0gdG9vCm15IEBEZWxldGVUaWNrZXRMaXN0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0FSUkFZJywKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICd1bml0dGVzdEBvdHJzLmNvbScsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwpmb3IgbXkgJFRpY2tldElEIChARGVsZXRlVGlja2V0TGlzdCkgewogICAgJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiMmNlYTBlZDczYzRiMmQ5ZmFlMjI1ODVlODU4YzQ1YmY4MjY1YWYyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FkbWluL0FkbWluQ3VzdG9tZXJVc2VyU2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGRpc2FibGUgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICAgICAgVmFsdWUgPT4gMAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWydhZG1pbiddLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IEN1c3RvbWVyVXNlcgogICAgICAgIG15ICRDdXN0b21lclVzZXJOYW1lID0gIkN1c3RvbWVyVXNlciIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDdXN0b21lclVzZXJJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgID0+ICRDdXN0b21lclVzZXJOYW1lLAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgICA9PiAkQ3VzdG9tZXJVc2VyTmFtZSwKICAgICAgICAgICAgVXNlckN1c3RvbWVySUQgPT4gJEN1c3RvbWVyVXNlck5hbWUsCiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgID0+ICRDdXN0b21lclVzZXJOYW1lLAogICAgICAgICAgICBVc2VyRW1haWwgICAgICA9PiAkQ3VzdG9tZXJVc2VyTmFtZSAuICdAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICAiQ3VzdG9tZXJVc2VyQWRkIC0gJEN1c3RvbWVyVXNlcklEIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IFNlcnZpY2UKICAgICAgICBteSAkU2VydmljZU5hbWUgPSAnU29tZVNlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkU2VydmljZUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnU29tZSBDb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZUFkZCAtICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgQWRtaW5DdXN0b21lclVzZXJTZXJ2aWNlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluQ3VzdG9tZXJVc2VyU2VydmljZSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IEFkbWluQ3VzdG9tZXJVc2VyU2VydmljZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpbHRlclNlcnZpY2VzIiwgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDdXN0b21lcnMiLCAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlcnZpY2UiLCAgICAgICAgICAgICdjc3MnICk7CgogICAgICAgICMgY2hlY2sgYnJlYWRjcnVtYiBvbiBPdmVydmlldyBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcuQnJlYWRDcnVtYicsICdjc3MnICksCiAgICAgICAgICAgICJCcmVhZGNydW1iIGlzIGZvdW5kIG9uIE92ZXJ2aWV3IHNjcmVlbi4iLAogICAgICAgICk7CgogICAgICAgICMgdGVzdCBzZWFyY2ggZmlsdGVyIGZvciBDdXN0b21lclVzZXIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDdXN0b21lclVzZXJTZWFyY2giLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0N1c3RvbWVyVXNlclNlYXJjaCIsICdjc3MnICktPnNlbmRfa2V5cygkQ3VzdG9tZXJVc2VyTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEN1c3RvbWVyVXNlck5hbWUgKSA+IC0xLAogICAgICAgICAgICAiQ3VzdG9tZXJVc2VyICRDdXN0b21lclVzZXJOYW1lIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2VhcmNoJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgZmlsdGVyIGZvciBzZXJ2aWNlLiBJdCBpcyBhdXRvIGNvbXBsZXRlLCBzdWJtaXQgaXMgbm90IG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpbHRlclNlcnZpY2VzIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRTZXJ2aWNlTmFtZSk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiJFNlcnZpY2VOYW1lIiwgJ2xpbmtfdGV4dCcgKS0+aXNfZGlzcGxheWVkKCksCiAgICAgICAgICAgICIkU2VydmljZU5hbWUgc2VydmljZSBmb3VuZCBvbiBwYWdlIiwKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpbHRlclNlcnZpY2VzIiwgJ2NzcycgKS0+Y2xlYXIoKTsKCiAgICAgICAgIyBhbGxvY2F0ZSB0ZXN0IHNlcnZpY2UgdG8gdGVzdCBjdXN0b21lciB1c2VyCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQ3VzdG9tZXJVc2VyTG9naW49JEN1c3RvbWVyVXNlck5hbWUnICldIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBicmVhZGNydW1iIG9uIGFsbG9jYXRlIHNjcmVlbgogICAgICAgIG15ICRDb3VudCA9IDE7CiAgICAgICAgbXkgJElzTGlua2VkQnJlYWRjcnVtYlRleHQ7CiAgICAgICAgZm9yIG15ICRCcmVhZGNydW1iVGV4dCAoCiAgICAgICAgICAgICdNYW5hZ2UgQ3VzdG9tZXIgVXNlci1TZXJ2aWNlcyBSZWxhdGlvbnMnLAogICAgICAgICAgICAnQWxsb2NhdGUgU2VydmljZXMgdG8gQ3VzdG9tZXIgVXNlciBcJycKICAgICAgICAgICAgLiAkQ3VzdG9tZXJVc2VyTmFtZSAuICcgJwogICAgICAgICAgICAuICRDdXN0b21lclVzZXJOYW1lIC4gJyAoJwogICAgICAgICAgICAuICRDdXN0b21lclVzZXJOYW1lIC4gJylcJycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuQnJlYWRDcnVtYiBsaTplcSgkQ291bnQpJykudGV4dCgpLnRyaW0oKSIpLAogICAgICAgICAgICAgICAgJEJyZWFkY3J1bWJUZXh0LAogICAgICAgICAgICAgICAgIkJyZWFkY3J1bWIgdGV4dCAnJEJyZWFkY3J1bWJUZXh0JyBpcyBmb3VuZCBvbiBzY3JlZW4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICB9CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W1xAdmFsdWU9JyRTZXJ2aWNlSUQnXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NhdmUnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayB0ZXN0IGN1c3RvbWVyIHVzZXIgYWxsb2NhdGlvbiB0byB0ZXN0IHNlcnZpY2UKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJFNlcnZpY2VOYW1lLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEB2YWx1ZT1cIiRDdXN0b21lclVzZXJOYW1lXCJdIiktPmlzX3NlbGVjdGVkKCksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJTZXJ2aWNlICRTZXJ2aWNlTmFtZSBpcyBhY3RpdmUgZm9yIEN1c3RvbWVyVXNlciAkQ3VzdG9tZXJVc2VyTmFtZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1vdmUgdGVzdCBjdXN0b21lciB1c2VyIGFsbG9jYXRpb25zIGZyb20gdGVzdCBzZXJ2aWNlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEB2YWx1ZT1cIiRDdXN0b21lclVzZXJOYW1lXCJdIiktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2F2ZSddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIGlzIGFueSB0ZXN0IHNlcnZpY2UgYWxsb2NhdGlvbiB0b3dhcmRzIHRlc3QgY3VzdG9tZXIgdXNlcgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0N1c3RvbWVyVXNlckxvZ2luPSRDdXN0b21lclVzZXJOYW1lJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEB2YWx1ZT0nJFNlcnZpY2VJRCddIiktPmlzX3NlbGVjdGVkKCksCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJTZXJ2aWNlICRTZXJ2aWNlTmFtZSBpcyBub3QgYWN0aXZlIGZvciBDdXN0b21lclVzZXIgJEN1c3RvbWVyVXNlck5hbWUiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY3VzdG9tZXIgdXNlcgogICAgICAgIGlmICgkU2VydmljZUlEKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJEZWxldGVkIFNlcnZpY2VDdXN0b21lclVzZXIgLSAkU2VydmljZU5hbWUgPD0+ICRDdXN0b21lclVzZXJOYW1lIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCBdLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZSAtICRTZXJ2aWNlTmFtZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJEN1c3RvbWVyVXNlcklEKSB7CiAgICAgICAgICAgICRDdXN0b21lclVzZXJOYW1lID0gJERCT2JqZWN0LT5RdW90ZSgkQ3VzdG9tZXJVc2VyTmFtZSk7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGN1c3RvbWVyX3VzZXIgV0hFUkUgY3VzdG9tZXJfaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJEN1c3RvbWVyVXNlck5hbWUgXSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJEZWxldGVkIEN1c3RvbWVyVXNlciAtICRDdXN0b21lclVzZXJOYW1lIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KCBDdXN0b21lclVzZXIgU2VydmljZSApKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICAgICAgVHlwZSA9PiAkQ2FjaGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWRtaW5JVFNNQ0lQQWxsb2NhdGUgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5JVFNNQ0lQQWxsb2NhdGUiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgQ3JpdGljYWxpdHkg4oaUIEltcGFjdCBmaWVsZHMKICAgICAgICBteSBAUHJpb3JpdHkgPSAocXcoMXZlcnlsb3cgMmxvdyAzbm9ybWFsIDRoaWdoIDV2ZXJ5aGlnaCkpOwogICAgICAgIGZvciBteSAkSW1wYWN0IChAUHJpb3JpdHkpIHsKICAgICAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoQFByaW9yaXR5KSB7CiAgICAgICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1ByaW9yaXR5SUQkSW1wYWN0LSRDcml0aWNhbGl0eSIsICdjc3MnICk7CiAgICAgICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBkOTMxYmRhNWEzYTMwYjEyZDJkNjk2OGY3NTVkZGIxMDJhNzQ0YTUyIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50U3RhdGlzdGljcy9BZGQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICBteSAkU0xBT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKICAgICAgICBteSAkU3RhdHNPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpOwoKICAgICAgICBteSAkU3VjY2VzcyA9ICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15IEBTZXJ2aWNlSURzOwogICAgICAgIG15IEBTTEFJRHM7CgogICAgICAgICMgQWRkIHRlc3Qgc2VydmljZXMgYW5kIFNMQXMuCiAgICAgICAgZm9yICggMSAuLiA1ICkgewogICAgICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICJUZXN0U2VydmljZSAtICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlNlcnZpY2UgJFNlcnZpY2VJRCBoYXMgYmVlbiBjcmVhdGVkLiIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZUlEOwoKICAgICAgICAgICAgbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAiVGVzdFNMQSAtICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiU0xBICRTTEFJRCBoYXMgYmVlbiBjcmVhdGVkLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQFNMQUlEcywgJFNMQUlEOwoKICAgICAgICB9CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ3N0YXRzJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIENoZWNrIGFkZCBzdGF0aXN0aWNzIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUFkZCIpOwoKICAgICAgICBmb3IgbXkgJFN0YXRpc3RpY3MgKHF3KER5bmFtaWNNYXRyaXggRHluYW1pY0xpc3QgU3RhdGljKSkgewogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAgICAgInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCdhW2RhdGEtc3RhdGlzdGljLXByZXNlbGVjdGlvbj0kU3RhdGlzdGljc10nKS5sZW5ndGgiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCdhW2RhdGEtc3RhdGlzdGljLXByZXNlbGVjdGlvbj0kU3RhdGlzdGljc10nKS5sZW5ndGgiKSwKICAgICAgICAgICAgICAgICJUaGVyZSBpcyBhIGxpbmsgZm9yIGFkZGluZyAnJFN0YXRpc3RpY3MnIHN0YXRpc3RpY3MiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayAiR28gdG8gb3ZlcnZpZXciIGJ1dHRvbi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1PdmVydmlld1wnICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgIG15IEBUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICA9PiAnU3RhdGlzdGljIER5bmFtaWNNYXRyaXgnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0JywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0R5bmFtaWNNYXRyaXgnLAogICAgICAgICAgICAgICAgWEF4aXMgICAgICAgICAgICA9PiAnWEF4aXNTZXJ2aWNlSURzJywKICAgICAgICAgICAgICAgIFlBeGlzICAgICAgICAgICAgPT4gJ1lBeGlzU0xBSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9uSUQgICAgPT4gJ1Jlc3RyaWN0aW9uc1F1ZXVlSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgPT4gMywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgPT4gJ1N0YXRpc3RpYyBEeW5hbWljTWF0cml4JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXQnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ0R5bmFtaWNNYXRyaXgnLAogICAgICAgICAgICAgICAgWEF4aXMgICAgICAgICAgICAgPT4gJ1hBeGlzQ3JlYXRlVGltZScsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgICA9PiAnWUF4aXNTTEFJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb25JRCAgICAgPT4gJ1Jlc3RyaWN0aW9uc1F1ZXVlSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgID0+IDMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZFRpbWVGaWVsZCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICdTdGF0aXN0aWMgLSBUaWNrZXRBY2NvdW50ZWRUaW1lJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldEFjY291bnRlZFRpbWUnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnRHluYW1pY01hdHJpeCcsCiAgICAgICAgICAgICAgICBYQXhpcyAgICAgICAgICAgID0+ICdYQXhpc0tpbmRzT2ZSZXBvcnRpbmcnLAogICAgICAgICAgICAgICAgWUF4aXMgICAgICAgICAgICA9PiAnWUF4aXNTTEFJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb25JRCAgICA9PiAnUmVzdHJpY3Rpb25zU2VydmljZUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbnZhbHVlID0+ICRTZXJ2aWNlSURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICdTdGF0aXN0aWMgLSBUaWNrZXRTb2x1dGlvblJlc3BvbnNlVGltZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRTb2x1dGlvblJlc3BvbnNlVGltZScsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdEeW5hbWljTWF0cml4JywKICAgICAgICAgICAgICAgIFhBeGlzICAgICAgICAgICAgPT4gJ1hBeGlzS2luZHNPZlJlcG9ydGluZycsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgID0+ICdZQXhpc1NMQUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgID0+ICdSZXN0cmljdGlvbnNTZXJ2aWNlSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1N0YXRpc3RpYyAtIFRpY2tldExpc3QnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0TGlzdCcsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdEeW5hbWljTGlzdCcsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgID0+ICdZQXhpc09yZGVyQnknLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9uSUQgICAgPT4gJ1Jlc3RyaWN0aW9uc1NlcnZpY2VJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb252YWx1ZSA9PiAkU2VydmljZUlEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSBAU3RhdHNGb3JtYXREeW5hbWljTWF0cml4ID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICA9PiAnUHJpbnQnLAogICAgICAgICAgICAgICAgUHJldmlld0NvbnRlbnQgPT4gJ1ByZXZpZXdDb250ZW50UHJpbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICA9PiAnRDM6OlN0YWNrZWRBcmVhQ2hhcnQnLAogICAgICAgICAgICAgICAgUHJldmlld0NvbnRlbnQgPT4gJ1ByZXZpZXdDb250ZW50RDNTdGFja2VkQXJlYUNoYXJ0JywKCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvcm1hdCAgICAgICAgID0+ICdEMzo6TGluZUNoYXJ0JywKICAgICAgICAgICAgICAgIFByZXZpZXdDb250ZW50ID0+ICdQcmV2aWV3Q29udGVudEQzTGluZUNoYXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgPT4gJ0QzOjpCYXJDaGFydCcsCiAgICAgICAgICAgICAgICBQcmV2aWV3Q29udGVudCA9PiAnUHJldmlld0NvbnRlbnREM0JhckNoYXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSBAU3RhdHNGb3JtYXREeW5hbWljTGlzdCA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgPT4gJ1ByaW50JywKICAgICAgICAgICAgICAgIFByZXZpZXdDb250ZW50ID0+ICdQcmV2aWV3Q29udGVudFByaW50JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFkZCBuZXcgc3RhdGlzdGljcy4KICAgICAgICBmb3IgbXkgJFN0YXRzRGF0YSAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIEdvIHRvIGFkZCBzdGF0aXN0aWNzIHNjcmVlbi4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1BZGQiKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBkYXRhLXN0YXRpc3RpYy1wcmVzZWxlY3Rpb24sIFwnJFN0YXRzRGF0YS0+e1R5cGV9XCcgKV0iKS0+Y2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNUaXRsZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgICAgIG15ICREZXNjcmlwdGlvbiA9ICdEZXNjcmlwdGlvbiAnIC4gJFN0YXRzRGF0YS0+e1RpdGxlfTsKCiAgICAgICAgICAgICMgU2V0IHZhbHVlcyBmb3IgbmV3IHN0YXRpc3RpY3MgLSBHZW5lcmFsIFNwZWNpZmljYXRpb25zLgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICAgICAgICdjc3MnICktPnNlbmRfa2V5cyggJFN0YXRzRGF0YS0+e1RpdGxlfSApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEZXNjcmlwdGlvbiIsICdjc3MnICktPnNlbmRfa2V5cygkRGVzY3JpcHRpb24pOwogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgIlwkKCcjT2JqZWN0TW9kdWxlJykudmFsKCckU3RhdHNEYXRhLT57T2JqZWN0fScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2F2ZSddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgIyBDaGVjayBYLWF4aXMgY29uZmlndXJhdGlvbiBkaWFsb2cuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkVkaXRYQXhpcyIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuRGlhbG9nLk1vZGFsIikubGVuZ3RoICYmICQoIiNEaWFsb2dCdXR0b24xIikubGVuZ3RoJwogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57T2JqZWN0fSBuZSAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRMaXN0JyApIHsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyBzZWxlY3QnKS52YWwoJyRTdGF0c0RhdGEtPntYQXhpc30nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgISQoIi5EaWFsb2cuTW9kYWwiKS5sZW5ndGgnICk7CgogICAgICAgICAgICAjIENoZWNrIFktYXhpcyBjb25maWd1cmF0aW9uIGRpYWxvZy4KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuRWRpdFlBeGlzIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5EaWFsb2cuTW9kYWwiKS5sZW5ndGgnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoIiNFZGl0RGlhbG9nIHNlbGVjdCIpLmxlbmd0aCAmJiAkKCIjRGlhbG9nQnV0dG9uMSIpLmxlbmd0aCcgKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAiXCQoJyNFZGl0RGlhbG9nIHNlbGVjdCcpLnZhbCgnJFN0YXRzRGF0YS0+e1lBeGlzfScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57T2JqZWN0fSBlcSAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRMaXN0JyApIHsKCiAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIGxvYWQgc2VsZWN0ZWQgWUF4aXMuCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyMkU3RhdHNEYXRhLT57WUF4aXN9JykubGVuZ3RoOyIKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBTZWxlY3Qgb3JkZXIgYnkgb3B0aW9uLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAiXCQoJyNFZGl0RGlhbG9nICMkU3RhdHNEYXRhLT57WUF4aXN9JykudmFsKCckU3RhdHNEYXRhLT57T3JkZXJCeX0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAhJCgiLkRpYWxvZy5Nb2RhbCIpLmxlbmd0aCcgKTsKCiAgICAgICAgICAgICMgQ2hlY2sgUmVzdHJpY3Rpb25zIGNvbmZpZ3VyYXRpb24gZGlhbG9nLgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0UmVzdHJpY3Rpb25zIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5EaWFsb2cuTW9kYWwiKS5sZW5ndGggJiYgJCgiI0VkaXREaWFsb2cgc2VsZWN0IikubGVuZ3RoJwogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJcJCgnI0VkaXREaWFsb2cgc2VsZWN0IG9wdGlvblt2YWx1ZT1cIiRTdGF0c0RhdGEtPntSZXN0cmljdGlvbklEfVwiXScpLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSkudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFdhaXQgZm9yIGxvYWQgc2VsZWN0ZWQgUmVzdHJpY3Rpb24uCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjJFN0YXRzRGF0YS0+e1Jlc3RyaWN0aW9uSUR9JykubGVuZ3RoOyIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQWRkIHJlc3RyaWN0aW9uLgogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyAjJFN0YXRzRGF0YS0+e1Jlc3RyaWN0aW9uSUR9IG9wdGlvblt2YWx1ZT1cIiRTdGF0c0RhdGEtPntSZXN0cmljdGlvbnZhbHVlfVwiXScpLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSkudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgISQoIi5EaWFsb2cuTW9kYWwiKS5sZW5ndGgnICk7CgogICAgICAgICAgICAjIENoYW5nZSBwcmV2aWV3IGZvcm1hdCB0byBQcmludC4KICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJ2J1dHRvbltkYXRhLWZvcm1hdD1QcmludF0nKS5jbGljaygpIik7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjUHJldmlld0NvbnRlbnRQcmludCIpLmNzcygiZGlzcGxheSIpID09PSAiYmxvY2siJwogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNQcmV2aWV3Q29udGVudFByaW50JykuY3NzKCdkaXNwbGF5JykiKSBlcSAnYmxvY2snLAogICAgICAgICAgICAgICAgIlByaW50IGZvcm1hdCBpcyBkaXNwbGF5ZWQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgQFN0YXRzRm9ybWF0ID0gQFN0YXRzRm9ybWF0RHluYW1pY01hdHJpeDsKCiAgICAgICAgICAgIGlmICggJFN0YXRzRGF0YS0+e1R5cGV9IGVxICdEeW5hbWljTGlzdCcgKSB7CiAgICAgICAgICAgICAgICBAU3RhdHNGb3JtYXQgPSBAU3RhdHNGb3JtYXREeW5hbWljTGlzdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRTdGF0c0Zvcm1hdCAoQFN0YXRzRm9ybWF0KSB7CgogICAgICAgICAgICAgICAgIyBDaGFuZ2UgcHJldmlldyBmb3JtYXQuCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnYnV0dG9uW2RhdGEtZm9ybWF0PVwiJFN0YXRzRm9ybWF0LT57Rm9ybWF0fVwiXScpLmNsaWNrKCkiKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnIyRTdGF0c0Zvcm1hdC0+e1ByZXZpZXdDb250ZW50fScpLmNzcygnZGlzcGxheScpID09PSAnYmxvY2snIgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyMkU3RhdHNGb3JtYXQtPntQcmV2aWV3Q29udGVudH0nKS5jc3MoJ2Rpc3BsYXknKSIpIGVxICdibG9jaycsCiAgICAgICAgICAgICAgICAgICAgIlN0YWNrZWRBcmVhIGZvcm1hdCBpcyBkaXNwbGF5ZWQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDaGVjayB0aGUgb3B0aW9ucyBmb3IgdGhlIGNhY2hlIGZpZWxkIGluIHRoZSBnZW5lcmFsIHNlY3Rpb24uCiAgICAgICAgICAgIGlmICggJFN0YXRzRGF0YS0+e1NlbGVjdGVkVGltZUZpZWxkfSApIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjQ2FjaGUgb3B0aW9uW3ZhbHVlPVwiMVwiXScpLnZhbCgpID09IDEgJiYgXCQoJyNDYWNoZSBvcHRpb25bdmFsdWU9XCIxXCJdJylbMF0uaW5uZXJIVE1MID09ICdZZXMnIgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgJ0ZvdW5kIGVsZW1lbnQgIlllcyIgaW4gQ2FjaGUgdGhlIHNlbGVjdCBmaWVsZC4nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjQ2FjaGUgb3B0aW9uW3ZhbHVlPVwiMVwiXScpLnZhbCgpID09IDEiKSwKICAgICAgICAgICAgICAgICAgICAnRm91bmQgbm8gZWxlbWVudCAiWWVzIiBpbiB0aGUgQ2FjaGUgc2VsZWN0IGZpZWxkLicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFNhdmUgYW5kIGZpbmlzaCB0ZXN0IHN0YXRpc3RpY3MuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NhdmVBbmRGaW5pc2giLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICBteSAkQ2hlY2tDb25maXJtSlMgPSA8PCJKQVZBU0NSSVBUIjsKKGZ1bmN0aW9uICgpIHsKICAgIHdpbmRvdy5jb25maXJtID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0oKSk7CkpBVkFTQ1JJUFQKCiAgICAgICAgICAgICMgU29ydCBkZWNyZWFzaW5nIGJ5IFN0YXRzSUQuCiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1PdmVydmlldztEaXJlY3Rpb249REVTQztPcmRlckJ5PUlEO1N0YXJ0SGl0PTEiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEdldCBzdGF0cyBJRHMuCiAgICAgICAgICAgIG15ICRTdGF0c0lEcyA9ICRTdGF0c09iamVjdC0+R2V0U3RhdHNMaXN0KAogICAgICAgICAgICAgICAgQWNjZXNzUncgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQ291bnQgICAgICAgPSBzY2FsYXIgQHskU3RhdHNJRHN9OwogICAgICAgICAgICBteSAkU3RhdHNJRExhc3QgPSAkU3RhdHNJRHMtPlsgJENvdW50IC0gMSBdOwoKICAgICAgICAgICAgIyBDaGVjayBmb3IgY3JlYXRlZCBzdGF0cyBvbiBvdmVydmlldyBzY3JlZW4uCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRTdGF0c0RhdGEtPntUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIlRlc3Qgc3RhdGlzdGljIGlzIGNyZWF0ZWQgLSAkU3RhdHNEYXRhLT57VGl0bGV9ICIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoJENoZWNrQ29uZmlybUpTKTsKCiAgICAgICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCBzdGF0aXN0aWNzLgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPURlbGV0ZUFjdGlvbjtTdGF0SUQ9JFN0YXRzSURMYXN0XCcgKV0iCiAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJBY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1FZGl0O1N0YXRJRD0kU3RhdHNJRExhc3QiICkKICAgICAgICAgICAgICAgICAgICA9PSAtMSwKICAgICAgICAgICAgICAgICJTdGF0c0RhdGEgc3RhdGlzdGljIGlzIGRlbGV0ZWQgLSAkU3RhdHNEYXRhLT57VGl0bGV9ICIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIENsZWFuIHVwIHRlc3QgZGF0YS4KICAgICAgICBmb3IgbXkgJFNMQUlEIChAU0xBSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlU2xhIC0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTTEFEZWxldGUgLSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlQ3VzdG9tZXJVc2VyIGRlbGV0ZWQgLSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZSAtICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIGZvciBteSAkQ2FjaGUgKAogICAgICAgICAgICBxdyAoU2VydmljZSBTTEEgU3RhdHMpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCggVHlwZSA9PiAkQ2FjaGUgKTsKICAgICAgICB9CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBmNDdkNGExODZhZWQzZDQ2YWU0MzM2OThmZGVhNTU1MmVjMmM1MTM3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50U3RhdGlzdGljcy9JbXBvcnQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdzdGF0cycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWcgPSB7CgogICAgICAgICAgICAjIFNlcnZpY2UgZGF0YQogICAgICAgICAgICBTZXJ2aWNlcyA9PiBbCiAgICAgICAgICAgICAgICB7IE5hbWUgPT4gIlRlc3RTZXJ2aWNlIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCkgfSwKICAgICAgICAgICAgICAgIHsgTmFtZSA9PiAiVGVzdFNlcnZpY2UgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSB9LAogICAgICAgICAgICBdLAoKICAgICAgICAgICAgIyBTTEEgZGF0YQogICAgICAgICAgICBTTEFzID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICJUZXN0U0xBIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIlRlc3RTTEEgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICBteSBAU2VydmljZUlEczsKCiAgICAgICAgIyBhZGQgU2VydmljZXMKICAgICAgICBteSAlU2VydmljZXNOYW1lVG9JRDsKICAgICAgICBTRVJWSUNFOgogICAgICAgIGZvciBteSAkU2VydmljZSAoIEB7ICRDb25maWctPntTZXJ2aWNlc30gfSApIHsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRSBpZiAhJFNlcnZpY2U7CiAgICAgICAgICAgIG5leHQgU0VSVklDRSBpZiAhJXskU2VydmljZX07CgogICAgICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICAleyRTZXJ2aWNlfSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiU2VydmljZSAkU2VydmljZUlEIGhhcyBiZWVuIGNyZWF0ZWQuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgc2VydmljZSBhcyBkZWZhdWx0IHNlcnZpY2UgZm9yIGFsbCBjdXN0b21lcnMKICAgICAgICAgICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICRTZXJ2aWNlSUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBTTEEgb2JqZWN0CiAgICAgICAgbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKICAgICAgICBteSBAU0xBSURzOwoKICAgICAgICAjIGFkZCBTTEFzIGFuZCBjb25uZWN0IHRoZW0gd2l0aCB0aGUgU2VydmljZXMKICAgICAgICBTTEE6CiAgICAgICAgZm9yIG15ICRTTEEgKCBAeyAkQ29uZmlnLT57U0xBc30gfSApIHsKCiAgICAgICAgICAgIG5leHQgU0xBIGlmICEkU0xBOwogICAgICAgICAgICBuZXh0IFNMQSBpZiAhJXskU0xBfTsKCiAgICAgICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgICAgICAgICAgICAgICV7JFNMQX0sCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiU0xBICRTTEFJRCBoYXMgYmVlbiBjcmVhdGVkLiIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFNMQUlEcywgJFNMQUlEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1JbXBvcnQiKTsKCiAgICAgICAgIyBpbXBvcnQgdGVzdCBzZWxlbml1bSBzdGF0aXN0aWMKICAgICAgICBteSAkTG9jYXRpb25Ob3RFeGlzdGluZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpCiAgICAgICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL1N0YXRzL1N0YXRzLlN0YXRpYy5Ob3RFeGlzdGluZy54bWwiOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpbGUiLCAnY3NzJyApLT5zZW5kX2tleXMoJExvY2F0aW9uTm90RXhpc3RpbmdPYmplY3QpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nSW1wb3J0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ29uZmlybSBKUyBlcnJvci4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBWZXJpZnkgZXJyb3IgY2xhc3MuCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI0ZpbGUnKS5oYXNDbGFzcygnRXJyb3InKSIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAnSW1wb3J0IGZpbGUgZmllbGQgaGFzIGNsYXNzIGVycm9yJywKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUltcG9ydCIpOwoKICAgICAgICAjIGltcG9ydCB0ZXN0IHNlbGVuaXVtIHN0YXRpc3RpYwogICAgICAgIG15ICRMb2NhdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpCiAgICAgICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL1N0YXRzL1N0YXRzLlRpY2tldE92ZXJ2aWV3LmRlLnhtbCI7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsZSIsICdjc3MnICktPnNlbmRfa2V5cygkTG9jYXRpb24pOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nSW1wb3J0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY3JlYXRlIHBhcmFtcyBmb3IgaW1wb3J0IHRlc3Qgc3RhdHMKICAgICAgICBteSAlU3RhdHNWYWx1ZXMgPSAoCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICfDnGJlcmJsaWNrIMO8YmVyIGFsbGUgVGlja2V0cyBpbSBTeXN0ZW0nLAogICAgICAgICAgICBPYmplY3QgICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0FrdHVlbGxlciBTdGF0dXMgYWxsZXIgaW0gU3lzdGVtIGJlZmluZGxpY2hlciBUaWNrZXRzIG9obmUgWmVpdGJlc2NocsOkbmt1bmcuJywKICAgICAgICAgICAgRm9ybWF0ICAgICAgPT4gJ0QzOjpCYXJDaGFydCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgaW1wb3J0ZWQgdmFsdWVzIG9uIHRlc3Qgc3RhdAogICAgICAgIGZvciBteSAkU3RhdHNWYWx1ZSAoIHNvcnQga2V5cyAlU3RhdHNWYWx1ZXMgKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRTdGF0c1ZhbHVlc3skU3RhdHNWYWx1ZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgIkV4cGV4dGVkIHBhcmFtICRTdGF0c1ZhbHVlIGZvciBpbXBvcnRlZCBzdGF0IGlzIGZvdW5kZWQgLSAkU3RhdHNWYWx1ZXN7JFN0YXRzVmFsdWV9IgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudFN0YXRpc3RpY3MgT3ZlcnZpZXcgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249T3ZlcnZpZXc7RGlyZWN0aW9uPURFU0M7T3JkZXJCeT1JRDtTdGFydEhpdD0xOyIKICAgICAgICApOwoKICAgICAgICBteSAkU3RhdHNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdHMnKTsKCiAgICAgICAgIyBnZXQgc3RhdHMgSURzCiAgICAgICAgbXkgJFN0YXRzSURzID0gJFN0YXRzT2JqZWN0LT5HZXRTdGF0c0xpc3QoCiAgICAgICAgICAgIEFjY2Vzc1J3ID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJENvdW50ICAgICAgID0gc2NhbGFyIEB7JFN0YXRzSURzfTsKICAgICAgICBteSAkU3RhdHNJRExhc3QgPSAkU3RhdHNJRHMtPlsgJENvdW50IC0gMSBdOwoKICAgICAgICAjIGNoZWNrIGZvciBpbXBvcnRlZCBzdGF0cyBvbiBvdmVydmlldyBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRTdGF0c1ZhbHVlc3tUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAiSW1wb3J0ZWQgc3RhdCAkU3RhdHNWYWx1ZXN7VGl0bGV9IC0gZm91bmQgb24gb3ZlcnZpZXcgc2NyZWVuIgogICAgICAgICk7CgogICAgICAgICMgZ28gdG8gaW1wb3J0ZWQgc3RhdCB0byBydW4gaXQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUVkaXQ7U3RhdElEPSRTdGF0c0lETGFzdFwnICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2hhbmdlIHByZXZpZXcgZm9ybWF0IHRvIFByaW50CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW2NvbnRhaW5zKFxAZGF0YS1mb3JtYXQsIFwnUHJpbnQnKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnRQcmludCcpLmNzcygnZGlzcGxheScpIikgZXEgJ2Jsb2NrJywKICAgICAgICAgICAgIlByaW50IGZvcm1hdCBpcyBkaXNwbGF5ZWQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI1ByZXZpZXdDb250ZW50RDNCYXJDaGFydCcpLmNzcygnZGlzcGxheScpIikgZXEgJ25vbmUnLAogICAgICAgICAgICAiQmFyIGZvcm1hdCBpcyBub3QgZGlzcGxheWVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNoYW5nZSBwcmV2aWV3IGZvcm1hdCB0byBCYXIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bY29udGFpbnMoXEBkYXRhLWZvcm1hdCwgXCdEMzo6QmFyQ2hhcnQnKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnREM0JhckNoYXJ0JykuY3NzKCdkaXNwbGF5JykiKSBlcSAnYmxvY2snLAogICAgICAgICAgICAiQmFyIGZvcm1hdCBpcyBkaXNwbGF5ZWQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI1ByZXZpZXdDb250ZW50UHJpbnQnKS5jc3MoJ2Rpc3BsYXknKSIpIGVxICdub25lJywKICAgICAgICAgICAgIlByaW50IGZvcm1hdCBpcyBub3QgZGlzcGxheWVkIiwKICAgICAgICApOwoKICAgICAgICAjIHRvZ2dsZSBHZW5lcmFsIFNwZWNpZmljYXRpb24KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAYXJpYS1jb250cm9scywgXCdDb3JlX1VJX0F1dG9nZW5lcmF0ZWRJRF8wJyldIiktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICdjc3MnICktPnNlbmRfa2V5cygiIC0gVXBkYXRlZCIpOwoKICAgICAgICAjIGNoZWNrIFgtYXhpcyBjb25maWd1cmF0aW9uIGRpYWxvZwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkVkaXRYQXhpcyIsICAgICAgICAgICAgICAgICAgICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNFZGl0RGlhbG9nIGEuUmVtb3ZlQnV0dG9uIGkiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjRWRpdERpYWxvZyBzZWxlY3QnKS52YWwoJ1hBeGlzU2VydmljZUlEcycpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBZLWF4aXMgY29uZmlndXJhdGlvbiBkaWFsb2cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0WUF4aXMiLCAgICAgICAgICAgICAgICAgICAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRWRpdERpYWxvZyBhLlJlbW92ZUJ1dHRvbiBpIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0VkaXREaWFsb2cgc2VsZWN0JykudmFsKCdZQXhpc1NMQUlEcycpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBSZXN0cmljdGlvbnMgY29uZmlndXJhdGlvbiBkaWFsb2cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0UmVzdHJpY3Rpb25zIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0VkaXREaWFsb2cgc2VsZWN0JykudmFsKCdSZXN0cmljdGlvbnNRdWV1ZUlEcycpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CgogICAgICAgICMgd2FpdCBmb3IgbG9hZCBzZWxlY3RlZCBSZXN0cmljdGlvbiAtIFF1ZXVlSURzCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNSZXN0cmljdGlvbnNRdWV1ZUlEcyIpLmxlbmd0aDsnICk7CgogICAgICAgICMgYWRkIHJlc3RyaWN0aW9uIHBlciBRdWV1ZSAtIEp1bmsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNFZGl0RGlhbG9nICNSZXN0cmljdGlvbnNRdWV1ZUlEcycpLnZhbCgnMycpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBzYXZlIGFuZCBmaW5pc2ggZWRpdAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQG5hbWU9J1NhdmVBbmRGaW5pc2gnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgbXkgJENoZWNrQ29uZmlybUpTID0gPDwiSkFWQVNDUklQVCI7CihmdW5jdGlvbiAoKSB7CiAgICB3aW5kb3cuY29uZmlybSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Owp9KCkpOwpKQVZBU0NSSVBUCgogICAgICAgICMgc29ydCBkZWNyZWFzaW5nIGJ5IFN0YXRzSUQKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1PdmVydmlldztEaXJlY3Rpb249REVTQztPcmRlckJ5PUlEO1N0YXJ0SGl0PTEiCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgkQ2hlY2tDb25maXJtSlMpOwoKICAgICAgICAjIGRlbGV0ZSBpbXBvcnRlZCB0ZXN0IHN0YXRzCiAgICAgICAgIyBjbGljayBvbiBkZWxldGUgaWNvbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1EZWxldGVBY3Rpb247U3RhdElEPSRTdGF0c0lETGFzdFwnKV0iCiAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJBY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1FZGl0O1N0YXRJRD0kU3RhdHNJRExhc3QiICkgPT0gLTEsCiAgICAgICAgICAgICJUZXN0IHN0YXRpc3RpYyBpcyBkZWxldGVkIC0gJFN0YXRzSURMYXN0ICIKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBjbGVhbiB1cCB0ZXN0IGRhdGEKICAgICAgICBmb3IgbXkgJFNMQUlEIChAU0xBSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlU2xhIC0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTTEFEZWxldGUgLSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlQ3VzdG9tZXJVc2VyIGRlbGV0ZWQgLSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZSAtICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgZm9yIG15ICRDYWNoZSAoCiAgICAgICAgICAgIHF3IChTZXJ2aWNlIFNMQSBTdGF0cykKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxNDM1N2U2Yjc2ODc0MWYxM2UwOTg5YjIzMjBiZDEwOGE0NWY0YjYwIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50VGlja2V0RnJlZVRleHQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiMgY3JlYXRlIGxvY2FsIGZ1bmN0aW9uIGZvciB3YWl0IG9uIEFKQVggdXBkYXRlCm15ICRXYWl0Rm9yQUpBWCA9IHN1YiB7CiAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAhJCgic3Bhbi5BSkFYTG9hZGVyOnZpc2libGUiKS5sZW5ndGgnCiAgICApOwp9OwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgICAgIG15ICRUaWNrZXRPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICAgICAgbXkgJFF1ZXVlT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwogICAgICAgIG15ICRTTEFPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CiAgICAgICAgbXkgJFN0YXRlT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwogICAgICAgIG15ICREQk9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGdldCBuZWVkZWQgdmFyaWFibGVzCiAgICAgICAgbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkU3VjY2VzczsKCiAgICAgICAgIyBkbyBub3QgY2hlY2sgUmljaFRleHQKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnRnJvbnRlbmQ6OlJpY2hUZXh0JywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGVuYWJsZSB0aWNrZXQgcmVzcG9uc2libGUgZmVhdHVyZQogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlJlc3BvbnNpYmxlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGVuYWJsZSB0aWNrZXQgc2VydmljZSBmZWF0dXJlCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjdXN0b21lciB1c2VyCiAgICAgICAgbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKQogICAgICAgICAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGl0bGUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgID0+ICdTZWxlbml1bUN1c3RvbWVyJywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICJUaWNrZXRJRCAkVGlja2V0SUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBxdWV1ZQogICAgICAgIG15ICRRdWV1ZU5hbWUgPSAnUXVldWUnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRRdWV1ZUlEICAgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgICAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRRdWV1ZUlELAogICAgICAgICAgICAiUXVldWVJRCAkUXVldWVJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNlcnZpY2VUeXBlTGlzdCB9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNMQVR5cGVMaXN0IH07CiMgLS0tCgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICdTZXJ2aWNlJyAuICRSYW5kb21JRDsKICAgICAgICBteSAkU2VydmljZUlEICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBtZW1iZXIgY3VzdG9tZXIgdXNlciB0byB0aGUgdGVzdCBzZXJ2aWNlCiAgICAgICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBTTEEKICAgICAgICBteSAkU0xBTmFtZSA9ICdTTEEnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTTEFJRCAgID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFskU2VydmljZUlEXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKIyAtLS0KICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAiU0xBSUQgJFNMQUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0ICdvcGVuJyB0eXBlIElECiAgICAgICAgbXkgJUxpc3RUeXBlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZVR5cGVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgIG15ICVSZXZlcnNlTGlzdFR5cGUgPSByZXZlcnNlICVMaXN0VHlwZTsKICAgICAgICBteSAkT3BlbklEICAgICAgICAgID0gJFJldmVyc2VMaXN0VHlwZXsib3BlbiJ9OwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHN0YXRlICh0eXBlICdvcGVuJykKICAgICAgICBteSAkU3RhdGVOYW1lID0gJ1N0YXRlJyAuICRSYW5kb21JRDsKICAgICAgICBteSAkU3RhdGVJRCAgID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU3RhdGVOYW1lLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFR5cGVJRCAgPT4gJE9wZW5JRCwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdGF0ZUlELAogICAgICAgICAgICAiU3RhdGVJRCAkU3RhdGVJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGxvZ2luCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBkZWZpbmUgZmllbGQgSURzIGFuZCBmcm9udGVuZCBtb2R1bGVzCiAgICAgICAgbXkgJUZyZWVUZXh0RmllbGRzID0gKAogICAgICAgICAgICBOb01hbmRhdG9yeSA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgICAgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgICAgIE5ld1F1ZXVlSUQgICAgICAgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgICAgIE5ld093bmVySUQgICAgICAgPT4gJ093bmVyJywKICAgICAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgPT4gJ1Jlc3BvbnNpYmxlJywKICAgICAgICAgICAgICAgIE5ld1N0YXRlSUQgICAgICAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFuZGF0b3J5ID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgPT4gJ1NlcnZpY2VNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICAgICA9PiAnU0xBTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5ld1F1ZXVlSUQgICAgICAgPT4gJ1F1ZXVlTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5ld093bmVySUQgICAgICAgPT4gJ093bmVyTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgPT4gJ1Jlc3BvbnNpYmxlTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5ld1N0YXRlSUQgICAgICAgPT4gJ1N0YXRlTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICBteSBAVGVzdHMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJ0Rpc2FibGUgTm9NYW5kYXRvcnkgYW5kIE1hbmRhdG9yeSBmaWVsZHMsIGNoZWNrIE5vTWFuZGF0b3J5IGZpZWxkIElEcycsCiAgICAgICAgICAgICAgICBDaGVja0ZpZWxkcyAgID0+ICdOb01hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBOb01hbmRhdG9yeSAgID0+IDAsCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFeHBlY3RlZEV4aXN0ID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJ0VuYWJsZSBOb01hbmRhdG9yeSBhbmQgZGlzYWJsZSBNYW5kYXRvcnkgZmllbGRzLCBjaGVjayBOb01hbmRhdG9yeSBmaWVsZCBJRHMnLAogICAgICAgICAgICAgICAgQ2hlY2tGaWVsZHMgICA9PiAnTm9NYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTm9NYW5kYXRvcnkgICA9PiAxLAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXhwZWN0ZWRFeGlzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdEaXNhYmxlIE5vTWFuZGF0b3J5IGFuZCBlbmFibGUgTWFuZGF0b3J5IGZpZWxkcywgY2hlY2sgTWFuZGF0b3J5IGZpZWxkIElEcycsCiAgICAgICAgICAgICAgICBDaGVja0ZpZWxkcyAgID0+ICdNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTm9NYW5kYXRvcnkgICA9PiAwLAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICA9PiAxLAogICAgICAgICAgICAgICAgRXhwZWN0ZWRFeGlzdCA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdFbmFibGUgTm9NYW5kYXRvcnkgYW5kIE1hbmRhdG9yeSBmaWVsZHMsIGNoZWNrIE1hbmRhdG9yeSBmaWVsZCBJRHMnLAogICAgICAgICAgICAgICAgQ2hlY2tGaWVsZHMgICA9PiAnTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5vTWFuZGF0b3J5ICAgPT4gMSwKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEV4cGVjdGVkRXhpc3QgPT4gMSwKICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIHdyaXRlIHRlc3QgY2FzZSBkZXNjcmlwdGlvbgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAkVGVzdC0+e05hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICROb01hbmRhdG9yeUZpZWxkICggdmFsdWVzICV7ICRGcmVlVGV4dEZpZWxkc3tOb01hbmRhdG9yeX0gfSApIHsKCiAgICAgICAgICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0RnJlZVRleHQjIyMkTm9NYW5kYXRvcnlGaWVsZCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntOb01hbmRhdG9yeX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJE1hbmRhdG9yeUZpZWxkICggdmFsdWVzICV7ICRGcmVlVGV4dEZpZWxkc3tNYW5kYXRvcnl9IH0gKSB7CgogICAgICAgICAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEZyZWVUZXh0IyMjJE1hbmRhdG9yeUZpZWxkIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e01hbmRhdG9yeX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG5hdmlnYXRlIHRvIHpvb20gdmlldyBvZiBjcmVhdGVkIHRlc3QgdGlja2V0CiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kVGlja2V0SUQiKTsKCiAgICAgICAgICAgICMgZm9yY2Ugc3ViIG1lbnVzIHRvIGJlIHZpc2libGUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjbGljayBvbmUgb2YgdGhlIGxpbmtzCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjbmF2LU1pc2NlbGxhbmVvdXMgdWwiKS5jc3MoeyAiaGVpZ2h0IjogImF1dG8iLCAib3BhY2l0eSI6ICIxMDAiIH0pOycKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2xpY2sgb24gJ0ZyZWUgRmllbGRzJyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRUaWNrZXRGcmVlVGV4dDtUaWNrZXRJRD0kVGlja2V0SUQnICldIikKICAgICAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aCcgKTsKCiAgICAgICAgICAgICMgZ2V0IE5vTWFuZGF0b3J5L01hbmRhdG9yeSBmaWVsZHMgZm9yIGV4aXN0IGNoZWNraW5nCiAgICAgICAgICAgIG15ICRDaGVja0ZpZWxkcyA9ICRUZXN0LT57Q2hlY2tGaWVsZHN9OwoKICAgICAgICAgICAgZm9yIG15ICRGaWVsZElEICggc29ydCBrZXlzICV7ICRGcmVlVGV4dEZpZWxkc3skQ2hlY2tGaWVsZHN9IH0gKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0V4cGVjdGVkRXhpc3R9ID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnIyRGaWVsZElEJykubGVuZ3RoIgogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAiRmllbGRJRCAkRmllbGRJRCBkb2Vzbid0IGV4aXN0IiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnIyRGaWVsZElEJykubGVuZ3RoIiksCiAgICAgICAgICAgICAgICAgICAgICAgICJGaWVsZElEICRGaWVsZElEIGV4aXN0cyIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRDaGVja0ZpZWxkcyBlcSAnTWFuZGF0b3J5JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCdsYWJlbFtmb3I9JEZpZWxkSURdJykuaGFzQ2xhc3MoJ01hbmRhdG9yeScpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpZWxkSUQgJEZpZWxkSUQgaXMgbWFuZGF0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2xvc2UgdGhlIHdpbmRvdyBhbmQgc3dpdGNoIGJhY2sgdG8gdGhlIGZpcnN0IHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5DYW5jZWxDbG9zZVBvcHVwIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwogICAgICAgIH0KCiAgICAgICAgIyBkZWZpbmUgZmllbGQgdmFsdWVzCiAgICAgICAgbXkgJVNldEZyZWVUZXh0RmllbGRzID0gKAogICAgICAgICAgICBTZXJ2aWNlSUQgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFNMQUlEICAgICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBOZXdRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICBOZXdPd25lcklEICAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICBOZXdTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gem9vbSB2aWV3IG9mIGNyZWF0ZWQgdGVzdCB0aWNrZXQKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFRpY2tldElEIik7CgogICAgICAgICMgZm9yY2Ugc3ViIG1lbnVzIHRvIGJlIHZpc2libGUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjbGljayBvbmUgb2YgdGhlIGxpbmtzCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjbmF2LU1pc2NlbGxhbmVvdXMgdWwiKS5jc3MoeyAiaGVpZ2h0IjogImF1dG8iLCAib3BhY2l0eSI6ICIxMDAiIH0pOycKICAgICAgICApOwoKICAgICAgICAjIGNsaWNrIG9uICdGcmVlIEZpZWxkcycgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRUaWNrZXRGcmVlVGV4dDtUaWNrZXRJRD0kVGlja2V0SUQnICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5DYW5jZWxDbG9zZVBvcHVwIikubGVuZ3RoJyApOwoKICAgICAgICAjIGZpbGwgYWxsIGZyZWUgdGV4dCBmaWVsZHMKICAgICAgICBGUkVFVEVYVEZJRUxEUzoKICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJVNldEZyZWVUZXh0RmllbGRzICkgewoKICAgICAgICAgICAgbmV4dCBGUkVFVEVYVEZJRUxEUyBpZiAkRmllbGRJRCBlcSAnU0xBSUQnOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJcJCgnIyRGaWVsZElEJykudmFsKCckU2V0RnJlZVRleHRGaWVsZHN7JEZpZWxkSUR9JykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKSIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgd2FpdCBmb3IgQUpBWCB0byBmaW5pc2gKICAgICAgICAgICAgJFdhaXRGb3JBSkFYLT4oKTsKCiAgICAgICAgICAgIGlmICggJEZpZWxkSUQgZXEgJ1NlcnZpY2VJRCcgKSB7CgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAiXCQoJyNTTEFJRCcpLnZhbCgnJFNldEZyZWVUZXh0RmllbGRze1NMQUlEfScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJykiCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgd2FpdCBmb3IgQUpBWCB0byBmaW5pc2gKICAgICAgICAgICAgICAgICRXYWl0Rm9yQUpBWC0+KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdGVzdCBjYXNlcyAtIGFsbCBmaWVsZHMgYXJlIHNldCBleGNlcHQgZXhhY3RseSBvbmUsIGFuZCBpbiB0aGUgbGFzdCBjYXNlIGFsbCBmaWVsZHMgYXJlIHNldAogICAgICAgIEBUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdDbGVhciBTZXJ2aWNlIGZpZWxkJywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdDbGVhciBTTEEgZmllbGQgYW5kIHNldCBiYWNrIFNlcnZpY2UgZmllbGQnLAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0NsZWFyIFF1ZXVlIGZpZWxkIGFuZCBzZXQgYmFjayBTTEEgZmllbGQnLAogICAgICAgICAgICAgICAgU0xBSUQgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBOZXdRdWV1ZUlEID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdDbGVhciBPd25lciBmaWVsZCBhbmQgc2V0IGJhY2sgUXVldWUgZmllbGQnLAogICAgICAgICAgICAgICAgTmV3UXVldWVJRCA9PiAkUXVldWVJRCwKICAgICAgICAgICAgICAgIE5ld093bmVySUQgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ0NsZWFyIFJlc3BvbnNpYmxlIGZpZWxkIGFuZCBzZXQgYmFjayBPd25lciBmaWVsZCcsCiAgICAgICAgICAgICAgICBOZXdPd25lcklEICAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQ2xlYXIgU3RhdGUgZmllbGQgYW5kIHNldCBiYWNrIFJlc3BvbnNpYmxlIGZpZWxkJywKICAgICAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICAgICBOZXdTdGF0ZUlEICAgICAgID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdTZXQgYmFjayBTdGF0ZSBmaWVsZCAtIGFsbCBmaWVsZHMgYXJlIHNldCcsCiAgICAgICAgICAgICAgICBOZXdTdGF0ZUlEID0+ICRTdGF0ZUlELAogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgIyBydW4gdGVzdCAtIGluIGVhY2ggaXRlcmF0aW9uIGV4YWN0bHkgb25lIGZpZWxkIGlzIGVtcHR5LCBsYXN0IGNhc2UgaXMgY29ycmVjdAogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIHdyaXRlIHRlc3QgY2FzZSBkZXNjcmlwdGlvbgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAkVGVzdC0+e05hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEV4cGVjdGVkRXJyb3JGaWVsZElEOwoKICAgICAgICAgICAgVEVTVEZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJXskVGVzdH0gKSB7CgogICAgICAgICAgICAgICAgbmV4dCBURVNURklFTEQgaWYgJEZpZWxkSUQgZXEgJ05hbWUnOwoKICAgICAgICAgICAgICAgIGlmICggJFRlc3QtPnskRmllbGRJRH0gZXEgJycgKSB7CiAgICAgICAgICAgICAgICAgICAgJEV4cGVjdGVkRXJyb3JGaWVsZElEID0gJEZpZWxkSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAiXCQoJyMkRmllbGRJRCcpLnZhbCgnJFRlc3QtPnskRmllbGRJRH0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpIgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHdhaXQgZm9yIEFKQVggdG8gZmluaXNoCiAgICAgICAgICAgICAgICAkV2FpdEZvckFKQVgtPigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFdhaXQgdW50aWwgb3BlbmVkIGZpZWxkIChkdWUgdG8gZXJyb3IpIGhhcyBjbG9zZWQuCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoImRpdi5qc3RyZWUtd2hvbGVyb3c6dmlzaWJsZSIpLmxlbmd0aCA9PSAwJyApOwoKICAgICAgICAgICAgIyBzdWJtaXQKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjc3VibWl0UmljaFRleHQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBjbGFzcyBFcnJvciBleGlzdHMgaW4gZXhwZWN0ZWQgZmllbGQgSUQKICAgICAgICAgICAgaWYgKCRFeHBlY3RlZEVycm9yRmllbGRJRCkgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnIyRFeHBlY3RlZEVycm9yRmllbGRJRCcpLmhhc0NsYXNzKCdFcnJvcicpIgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgIkZpZWxkSUQgJEV4cGVjdGVkRXJyb3JGaWVsZElEIGlzIGVtcHR5IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICJBbGwgbWFuZGF0b3J5IGZpZWxkcyBhcmUgZmlsbGVkIC0gc3VjY2Vzc2Z1bCBmcmVlIHRleHQgZmllbGRzIHVwZGF0ZSIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc3dpdGNoIGJhY2sgdG8gdGhlIG1haW4gd2luZG93CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlZmluZSBtZXNzYWdlcyBpbiB0aWNrZXQgaGlzdG9yeSBzY3JlZW4KICAgICAgICBteSAlRnJlZUZpZWxkTWVzc2FnZXMgPSAoCiAgICAgICAgICAgIFNlcnZpY2VVcGRhdGUgICAgID0+ICJDaGFuZ2VkIHNlcnZpY2UgdG8gXCIkU2VydmljZU5hbWVcIiAoJFNlcnZpY2VJRCkuIiwKICAgICAgICAgICAgU0xBVXBkYXRlICAgICAgICAgPT4gIkNoYW5nZWQgU0xBIHRvIFwiJFNMQU5hbWVcIiAoJFNMQUlEKS4iLAogICAgICAgICAgICBPd25lclVwZGF0ZSAgICAgICA9PiAiQ2hhbmdlZCBvd25lciB0byBcIiRUZXN0VXNlckxvZ2luXCIgKCRUZXN0VXNlcklEKS4iLAogICAgICAgICAgICBSZXNwb25zaWJsZVVwZGF0ZSA9PiAiQ2hhbmdlZCByZXNwb25zaWJsZSB0byBcIiRUZXN0VXNlckxvZ2luXCIgKCRUZXN0VXNlcklEKS4iLAogICAgICAgICAgICBRdWV1ZVVwZGF0ZSAgICAgICA9PiAiQ2hhbmdlZCBxdWV1ZSB0byBcIiRRdWV1ZU5hbWVcIiAoJFF1ZXVlSUQpIGZyb20gXCJSYXdcIiAoMikuIiwKICAgICAgICAgICAgU3RhdGVVcGRhdGUgICAgICAgPT4gIkNoYW5nZWQgc3RhdGUgZnJvbSBcIm5ld1wiIHRvIFwiJFN0YXRlTmFtZVwiLiIKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIHpvb20gdmlldyBvZiBjcmVhdGVkIHRlc3QgdGlja2V0CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRUaWNrZXRJRCIpOwoKICAgICAgICAjIGZvcmNlIHN1YiBtZW51cyB0byBiZSB2aXNpYmxlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gY2xpY2sgb25lIG9mIHRoZSBsaW5rcwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI25hdi1IaXN0b3J5IHVsIikuY3NzKHsgImhlaWdodCI6ICJhdXRvIiwgIm9wYWNpdHkiOiAiMTAwIiB9KTsnCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudFRpY2tldEhpc3Rvcnkgb2YgY3JlYXRlZCB0ZXN0IHRpY2tldAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0SGlzdG9yeTtUaWNrZXRJRD0kVGlja2V0SUQiKTsKCiAgICAgICAgZm9yIG15ICRBY3Rpb24gKCBzb3J0IGtleXMgJUZyZWVGaWVsZE1lc3NhZ2VzICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZyZWVGaWVsZE1lc3NhZ2VzeyRBY3Rpb259ICkgPiAtMSwKICAgICAgICAgICAgICAgICJBY3Rpb24gJEFjdGlvbiBpcyBjb21wbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjbGVhbnVwCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHRpY2tldAogICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBUaWNrZXQgZGVsZXRpb24gY291bGQgZmFpbCBpZiBhcGFjaGUgc3RpbGwgd3JpdGVzIHRvIHRpY2tldCBoaXN0b3J5LiBUcnkgYWdhaW4gaW4gdGhpcyBjYXNlLgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICBzbGVlcCAzOwogICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlRpY2tldElEICRUaWNrZXRJRCBpcyBkZWxldGVkIgogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGN1c3RvbWVyIHVzZXIgcmVmZXJlbmNlZCBmb3Igc2VydmljZQogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIGN1c3RvbWVyX3VzZXJfbG9naW4gPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkVGVzdEN1c3RvbWVyVXNlckxvZ2luIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJEZWxldGVkIHNlcnZpY2UgcmVsYXRpb25zIGZvciAkVGVzdEN1c3RvbWVyVXNlckxvZ2luIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBzbGEgcmVmZXJlbmNlZCBmb3Igc2VydmljZQogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCBPUiBzbGFfaWQgPSAkU0xBSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiUmVsYXRpb24gU0xBSUQgJFNMQUlEIHJlZmVyZW5jZWQgdG8gc2VydmljZSBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3Qgc2VydmljZSBwcmVmZXJlbmNlcwogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX3ByZWZlcmVuY2VzIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2VJRCAkU2VydmljZUlEIHByZWZlcmVuZWNlcyBpcyBkZWxldGVkIiwKICAgICAgICApOwojIC0tLQoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3Qgc2VydmljZQogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgU0xBCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTTEFJRCAkU0xBSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHN0YXRlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHRpY2tldF9zdGF0ZSBXSEVSRSBpZCA9ICRTdGF0ZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlN0YXRlSUQgJFN0YXRlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHF1ZXVlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KFRpY2tldCBTZXJ2aWNlIFNMQSBTdGF0ZSBRdWV1ZSkpIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Ugc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBsaW5rIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRCIgKSA+IC0xLAogICAgICAgICAgICAiTGluayB0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBmb3IgU2VydmljZSBJRCAkU2VydmljZUlEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9wcmVmZXJlbmNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlIHByZWZlcmVuY2VzIGlzIGRlbGV0ZWQgLSBJRCAkU2VydmljZUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTZXJ2aWNlJwogICAgICAgICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCmlmICggJFNlbGVuaXVtLT57YnJvd3Nlcl9uYW1lfSBuZSAnZmlyZWZveCcgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAxLAogICAgICAgICdQREYgdGVzdCBjdXJyZW50bHkgc3VwcG9ydHMgRmlyZWZveCBvbmx5JwogICAgKTsKICAgIHJldHVybiAxOwp9CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0kU2VydmljZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gcHJpbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNU2VydmljZVByaW50O1NlcnZpY2VJRD0kU2VydmljZUlEXCcgKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICMgc3dpdGNoIHRvIGFub3RoZXIgd2luZG93CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcHJpbnQgc2NyZWVuIGlzIGxvYWRlZAogICAgICAgIEFDVElWRVNMRUVQOgogICAgICAgIGZvciBteSAkU2Vjb25kICggMSAuLiAyMCApIHsKICAgICAgICAgICAgaWYgKCBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgInByaW50ZWQgYnkiICkgPiAtMSwgKSB7CiAgICAgICAgICAgICAgICBsYXN0IEFDVElWRVNMRUVQOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNsZWVwIDE7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBwcmludGVkIHZhbHVlcyBvZiB0ZXN0IHNlcnZpY2UKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkU2VydmljZU5hbWUiICkgPiAtMSwKICAgICAgICAgICAgIlNlcnZpY2U6ICRTZXJ2aWNlTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIk9wZXJhdGlvbmFsIiApID4gLTEsCiAgICAgICAgICAgICJDdXJyZW50IEluY2lkZW50OiBPcGVyYXRpb25hbCAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIjMgbm9ybWFsIiApID4gLTEsCiAgICAgICAgICAgICJDcml0aWNhbGl0eTogMyBub3JtYWwgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgREIgb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgY2xlYW4gdXAgc2VydmljZSBkYXRhCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBwcmVmZXJlbmNlcyBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2UgaXMgZGVsZXRlZCAtIElEICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU2VydmljZScKICAgICAgICApOwoKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbiB3aXRoIG5vIFNlcnZpY2VJRCwgZXhwZWN0aW5nIGVycm9yIG1lc3NhZ2Ugc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPSIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2Ugd2l0aG91dCBzZXJ2aWNlIElEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNU2VydmljZVpvb20gc2NyZWVuIHdpdGggd3JvbmcgU2VydmljZUlELCBleHBlY3RpbmcgZXJyb3IgbWVzc2FnZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9YXNkIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnU2VydmljZUlEIGFzZCBub3QgZm91bmQgaW4gZGF0YWJhc2UhJyApID4gLTEsCiAgICAgICAgICAgICJFcnJvciBtZXNzYWdlIHdpdGggd3Jvbmcgc2VydmljZSBJRCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbiB3aXRoIGNvcnJlY3QgU2VydmljZUlECiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPSRTZXJ2aWNlSUQiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgQWdlbnRJVFNNU2VydmljZVpvb20gZmllbGRzCiAgICAgICAgbXkgQEVsZW1lbnRMaXN0ID0gKCAnQ29udGVudENvbHVtbicsICdTaWRlYmFyQ29sdW1uJyApOwogICAgICAgIGZvciBteSAkRWxlbWVudENoZWNrIChARWxlbWVudExpc3QpIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi4kRWxlbWVudENoZWNrIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJTZXJ2aWNlOiAkU2VydmljZU5hbWUiICkgPiAtMSwKICAgICAgICAgICAgIlNlcnZpY2U6ICRTZXJ2aWNlTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBwcmVmZXJlbmNlcyBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2UgaXMgZGVsZXRlZCAtIElEICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU2VydmljZScKICAgICAgICApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgPT4gMiwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgIlNMQSBpcyBjcmVhdGVkIC0gSUQgJFNMQUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNU0xBIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBsaW5rIHRvIEFnZW50SVRTTVNMQVpvb20gc2NyZWVuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9JFNMQUlEIiApID4gLTEsCiAgICAgICAgICAgICJMaW5rIHRvIEFnZW50SVRTTVNMQVpvb20gZm9yIFNMQSBJRCAkU0xBSUQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBTTEEKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSAkU0xBSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU0xBIGlzIGRlbGV0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU0xBJwogICAgICAgICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCmlmICggJFNlbGVuaXVtLT57YnJvd3Nlcl9uYW1lfSBuZSAnZmlyZWZveCcgKSB7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAxLAogICAgICAgICdQREYgdGVzdCBjdXJyZW50bHkgc3VwcG9ydHMgRmlyZWZveCBvbmx5JwogICAgKTsKICAgIHJldHVybiAxOwp9CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDEyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gMTgwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiA1ODAsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAiU0xBIGlzIGNyZWF0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9JFNMQUlEIik7CgogICAgICAgICMgY2xpY2sgb24gcHJpbnQgbWVudQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01TTEFQcmludDtTTEFJRD0kU0xBSURcJyApXSIpLT5jbGljaygpOwoKICAgICAgICAjIHN3aXRjaCB0byBhbm90aGVyIHdpbmRvdwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHByaW50IHNjcmVlbiBpcyBsb2FkZWQKICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgbXkgJFNlY29uZCAoIDEgLi4gMjAgKSB7CiAgICAgICAgICAgIGlmICggaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJwcmludGVkIGJ5IiApID4gLTEsICkgewogICAgICAgICAgICAgICAgbGFzdCBBQ1RJVkVTTEVFUDsKICAgICAgICAgICAgfQogICAgICAgICAgICBzbGVlcCAxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgcHJpbnRlZCB2YWx1ZXMgb2YgdGVzdCBTTEEKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkU0xBTmFtZSIgKSA+IC0xLAogICAgICAgICAgICAiU2VydmljZTogJFNMQU5hbWUgLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJDYWxlbmRhciBEZWZhdWx0IiApID4gLTEsCiAgICAgICAgICAgICJDYWxlbmRhcjogQ2FsZW5kYXIgRGVmYXVsdCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICBteSBAUmVzcG9uZFRpbWUgPSAoIDEyMCwgMTgwLCA1ODAgKTsKICAgICAgICBmb3IgbXkgJFRpbWUgKEBSZXNwb25kVGltZSkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGltZSAuICIgbWludXRlcyIgKSA+IC0xLAogICAgICAgICAgICAgICAgIlJlc3BvbmQgJFRpbWUgbWludXRlcyAtIGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNMQSBpcyBkZWxldGVkIC0gSUQgJFNMQUlEIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NMQScKICAgICAgICApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDEyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gMTgwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiA1ODAsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAiU0xBIGlzIGNyZWF0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbiB3aXRoIG5vIFNMQUlELCBleHBlY3RpbmcgZXJyb3IgbWVzc2FnZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPSIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIFNMQUlEIGlzIGdpdmVuIScgKSA+IC0xLAogICAgICAgICAgICAiRXJyb3IgbWVzc2FnZSB3aXRob3V0IFNMQSBJRCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNMQVpvb20gc2NyZWVuIHdpdGggd3JvbmcgU0xBSUQsIGV4cGVjdGluZyBlcnJvciBtZXNzYWdlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9YXNkIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnU0xBSUQgYXNkIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2Ugd2l0aCB3cm9uZyBTTEEgSUQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbiB3aXRoIGNvcnJlY3QgU0xBSUQKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPSRTTEFJRCIpOwoKICAgICAgICAjIGNoZWNrIGZvciBBZ2VudElUU01TTEFab29tIGZpZWxkcwogICAgICAgIG15IEBFbGVtZW50TGlzdCA9ICggJ0NvbnRlbnRDb2x1bW4nLCAnU2lkZWJhckNvbHVtbicgKTsKICAgICAgICBmb3IgbXkgJEVsZW1lbnRDaGVjayAoQEVsZW1lbnRMaXN0KSB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuJEVsZW1lbnRDaGVjayIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiU0xBOiAkU0xBTmFtZSIgKSA+IC0xLAogICAgICAgICAgICAiU0xBOiAkU0xBTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciByZXNwb25kIHRpbWVzCiAgICAgICAgbXkgQFJlc3BvbmRUaW1lID0gKCAxMjAsIDE4MCwgNTgwICk7CiAgICAgICAgZm9yIG15ICRUaW1lIChAUmVzcG9uZFRpbWUpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpbWUgLiAiIG1pbnV0ZXMiICkgPiAtMSwKICAgICAgICAgICAgICAgICJSZXNwb25kICRUaW1lIG1pbnV0ZXMgLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IFNMQQogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTTEEgaXMgZGVsZXRlZCAtIElEICRTTEFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTTEEnCiAgICAgICAgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxNDM1N2U2Yjc2ODc0MWYxM2UwOTg5YjIzMjBiZDEwOGE0NWY0YjYwIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50VGlja2V0U2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSGVscGVyICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBkbyBub3QgY2hlY2sgZW1haWwgYWRkcmVzc2VzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgZW5hYmxlIHRpY2tldCBzZXJ2aWNlIGZlYXR1cmUKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdHdvIHRlc3Qgc2VydmljZXMKICAgICAgICBteSBAU2VydmljZUlEczsKICAgICAgICBteSBAU2VydmljZU5hbWVzOwogICAgICAgIGZvciBteSAkU2VydmljZSAocXcoUGFyZW50IENoaWxkKSkgewogICAgICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZSAuICdTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSBUZXN0JywKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJTZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgY3JlYXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICAgJFNlcnZpY2VJRDsKICAgICAgICAgICAgcHVzaCBAU2VydmljZU5hbWVzLCAkU2VydmljZU5hbWU7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBzZWNvbmQgc2VydmljZSB0byBiZSBjaGlsZCBvZiBmaXJzdCBvbmUKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRHNbMV0sCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVzWzFdLAogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEc1sxXSBpcyBub3cgY2hpbGQgc2VydmljZSIKICAgICAgICApOwoKICAgICAgICAjIHVwZGF0ZSBwYXJlbnQgc2VydmljZSB0byBpbnZhbGlkIHN0YXR1cywgYnVnICMxMTgxNgogICAgICAgICMgdGVzdCBpZiBjaGlsZCBzZXJ2aWNlIGFyZSB2aXNpYmxlIHdoZW4gcGFyZW50IGlzIGludmFsaWQKICAgICAgICAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVzWzBdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlBhcmVudCBTZXJ2aWNlIElEICRTZXJ2aWNlSURzWzBdIGlzIGludmFsaWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdGlja2V0cwogICAgICAgIG15IEBUaWNrZXRJRHM7CiAgICAgICAgZm9yIG15ICRMb2NrIChxdyhsb2NrIHVubG9jaykpIHsKICAgICAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBUaWNrZXQnLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgICAgIExvY2sgICAgICAgICAgPT4gJExvY2ssCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRHNbMV0sCiAgICAgICAgICAgICAgICBDdXN0b21lcklEICAgID0+ICdTZWxlbml1bUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJ1NlbGVuaXVtQ3VzdG9tZXJAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgaXMgY3JlYXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQFRpY2tldElEcywgJFRpY2tldElEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50VGlja2V0U2VydmljZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFNlcnZpY2UiKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gdGlja2V0cyB3aXRoIE15IFNlcnZpY2UgZmlsdGVyCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9MDtcJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIHRpY2tldCBkYXRhIGZvdW5kLicgKSA+IC0xLAogICAgICAgICAgICAiTm8gdGlja2V0cyBmb3VuZCB3aXRoIE15IFNlcnZpY2UgZmlsdGVyIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBwYXJlbnQgdGVzdCBzZXJ2aWNlIGZpbHRlciBidXR0b24gYW5kIGNsaWNrIG9uIGl0CiAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMF07XCcgKV0iCiAgICAgICAgKTsKICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICAkRWxlbWVudC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNsaWNrIG9uIGNoaWxkIHNlcnZpY2UKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRUaWNrZXRTZXJ2aWNlO1NlcnZpY2VJRD0kU2VydmljZUlEc1sxXTtcJyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGRpZmZlcmVudCB2aWV3cyBmb3IgZmlsdGVycwogICAgICAgIGZvciBteSAkVmlldyAocXcoU21hbGwgTWVkaXVtIFByZXZpZXcpKSB7CgogICAgICAgICAgICAjIGdvIHRvIGRlZmF1bHQgc21hbGwgdmlldwogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07Vmlldz1TbWFsbCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2xpY2sgb24gdmlld2VyIGNvbnRyb2xsZXIKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9VW5sb2NrZWQ7Vmlldz0kVmlldztTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9U21hbGw7XCcgKV0iCiAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgYWxsIGV4cGVjdGVkIHRpY2tldHMgYXJlIHByZXNlbnQKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICAgICAgICAgIG15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgYW5kIHVubG9ja2VkIHRpY2tldHMKICAgICAgICAgICAgICAgIGlmICggJFRpY2tldERhdGF7TG9ja30gZXEgJ3VubG9jaycgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0F2YWlsYWJsZSB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPVVubG9ja2VkXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciB1bmxvY2tlZCB0aWNrZXRzIHdpdGggJ0F2YWlsYWJsZSB0aWNrZXRzJyBmaWx0ZXIgb24KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAiVGlja2V0IGZvdW5kIG9uIHBhZ2Ugd2l0aCAnQXZhaWxhYmxlIHRpY2tldHMnIGZpbHRlciAtICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNsaWNrIG9uICdBbGwgdGlja2V0JyBmaWx0ZXIKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnU2VydmljZUlEPSRTZXJ2aWNlSURzWzFdO1NvcnRCeT1BZ2U7T3JkZXJCeT1VcDtWaWV3PSRWaWV3O0ZpbHRlcj1BbGxcJyApXSIKICAgICAgICAgICAgICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIHVubG9ja2VkIHRpY2tldHMgd2l0aCAnQWxsIHRpY2tldHMnIGZpbHRlciBvbgogICAgICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSApID4gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICJUaWNrZXQgZm91bmQgb24gcGFnZSB3aXRoICdBbGwgdGlja2V0cycgZmlsdGVyIG9uIC0gJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSAiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjbGljayBvbiAnQWxsIHRpY2tldCcgZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ1NlcnZpY2VJRD0kU2VydmljZUlEc1sxXTtTb3J0Qnk9QWdlO09yZGVyQnk9VXA7Vmlldz0kVmlldztGaWx0ZXI9QWxsXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgdGlja2V0cyB3aXRoICAnQWxsIHRpY2tldCcgZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9ICkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2tlZCBUaWNrZXQgZm91bmQgb24gcGFnZSB3aXRoICdBbGwgdGlja2V0cycgZmlsdGVyIG9uIC0gJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSAiLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0F2YWlsYWJsZSB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPVVubG9ja2VkXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgdGlja2V0cyB3aXRoICdBdmFpbGFibGUgdGlja2V0cycgZmlsdGVyIG9uCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9ICkgPT0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICJEaWQgbm90IGZpbmQgbG9ja2VkIHRpY2tldCAtICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gLSB3aXRoICdBdmFpbGFibGUgdGlja2V0cycgZmlsdGVyIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgdGlja2V0cwogICAgICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBUaWNrZXQgZGVsZXRpb24gY291bGQgZmFpbCBpZiBhcGFjaGUgc3RpbGwgd3JpdGVzIHRvIHRpY2tldCBoaXN0b3J5LiBUcnkgYWdhaW4gaW4gdGhpcyBjYXNlLgogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgIHNsZWVwIDM7CiAgICAgICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3Qgc2VydmljZQogICAgICAgIGZvciBteSAkU2VydmljZURlbGV0ZSAoQFNlcnZpY2VJRHMpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZURlbGV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZURlbGV0ZSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgZm9yIG15ICRDYWNoZSAoCiAgICAgICAgICAgIHF3IChUaWNrZXQgU2VydmljZSkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA1OTVjMWI3MmUzYWMwNDJkYmRjOWJmYmU2YWYzNmFhZDI3Mzc1YzFkIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9QREZUaWNrZXQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKaWYgKCAkU2VsZW5pdW0tPnticm93c2VyX25hbWV9IG5lICdmaXJlZm94JyApIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDEsCiAgICAgICAgIlBERiB0ZXN0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIEZpcmVmb3giLAogICAgKTsKICAgIHJldHVybiAxOwp9CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgICAgICMgRG8gbm90IGNoZWNrIGVtYWlsIGFkZHJlc3Nlcy4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IFJlc3BvbnNpYmxlIGZlYXR1cmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6UmVzcG9uc2libGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAxCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IFR5cGUgZmVhdHVyZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIHRpY2tldCBzZXJ2aWNlIGZlYXR1cmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBRdWV1ZS4KICAgICAgICBteSAkUXVldWVOYW1lID0gJ1F1ZScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFF1ZXVlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTZWxlbml1bSBRdWV1ZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRRdWV1ZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBRdWV1ZUlEICRRdWV1ZUlEIgogICAgICAgICk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU2VydmljZVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyAkU2VydmljZVR5cGVMaXN0IH07CgojIGdldCB0aGUgbGlzdCBvZiBzbGEgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNMQVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyAkU0xBVHlwZUxpc3QgfTsKCiMgR2V0IHRoZSBjdXJyZW50IHNldHRpbmcgZm9yIGN1c3RvbWVyIHRpY2tldCBwcmludApteSAlQ3VzdG9tZXJUaWNrZXRQcmludFN5c0NvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+U2V0dGluZ0dldCgKICAgIE5hbWUgPT4gJ0N1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyVGlja2V0UHJpbnQnLAopOwoKIyBNYWtlIHN1cmUgQ3VzdG9tZXJUaWNrZXQgcHJpbnQgaXMgZW5hYmxlZC4KJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjQ3VzdG9tZXJUaWNrZXRQcmludCcsCiAgICBWYWx1ZSA9PiAkQ3VzdG9tZXJUaWNrZXRQcmludFN5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0sCik7CgojIC0tLQoKICAgICAgICAjIENyZWF0ZSBTZXJ2aWNlLgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICdTZXJ2aScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnU2VsZW5pdW0gU2VydmljZScsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBTZXJ2aWNlSUQgJFNlcnZpY2VJRCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBTTEEuCiAgICAgICAgbXkgJFNMQU5hbWUgPSAnU0wnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTTEFJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFBZGQoCiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgID0+IFskU2VydmljZUlEXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCiMgLS0tCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDUwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgID0+IDIwMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgPT4gJ1NlbGVuaXVtIFNMQScsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiMgLS0tCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgICAgICJDcmVhdGVkIFNMQUlEICRRdWV1ZUlEIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIFR5cGUuCiAgICAgICAgbXkgJFR5cGVOYW1lID0gJ1R5cGUnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRUeXBlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFR5cGVOYW1lLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVHlwZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBUeXBlSUQgJFR5cGVJRCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBVc2Vycy4KICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICAgICAgbXkgQFVzZXJzOwogICAgICAgIGZvciBteSAkVXNlckNvdW50ICggMSAuLiAyICkgewoKICAgICAgICAgICAgIyBDcmVhdGUgdGVzdCBVc2VyIGFuZCBsb2dpbi4KICAgICAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgICAgIEdyb3VwcyA9PiBbJ3VzZXJzJ10sCiAgICAgICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAgICAgIyBHZXQgdXNlciBkYXRhLgogICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VyID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAVXNlcnMsIFwlVXNlckRhdGE7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSBDdXN0b21lciBDb21wYW55LgogICAgICAgIG15ICVDdXN0b21lckNvbXBhbnkgPSAoCiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55TmFtZSAgICA9PiAnQ29tcGFueScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVN0cmVldCAgPT4gJ1N0cmVldCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVpJUCAgICAgPT4gJ1pJUCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueUNpdHkgICAgPT4gJ0NpdHknIC4gJFJhbmRvbUlELAogICAgICAgICAgICBDdXN0b21lckNvbXBhbnlDb3VudHJ5ID0+ICdDb3VudHJ5JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55VVJMICAgICA9PiAnVVJMJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55Q29tbWVudCA9PiAnQ29tbWVudCcgLiAkUmFuZG9tSUQsCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJDb21wYW55SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55JyktPkN1c3RvbWVyQ29tcGFueUFkZCgKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICVDdXN0b21lckNvbXBhbnksCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEN1c3RvbWVyQ29tcGFueUlELAogICAgICAgICAgICAiQ3JlYXRlZCBDdXN0b21lckNvbXBhbnlJRCAkQ3VzdG9tZXJDb21wYW55SUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgQ3VzdG9tZXIgVXNlci4KICAgICAgICBteSAlQ3VzdG9tZXJVc2VyID0gKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lICA9PiAnQ3VzdG9tZXJGaXJzdE5hbWUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgICA9PiAnQ3VzdG9tZXJMYXN0TmFtZScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFVzZXJDdXN0b21lcklEID0+ICRDdXN0b21lckNvbXBhbnlJRCwKICAgICAgICAgICAgVXNlckxvZ2luICAgICAgPT4gJ0N1c3RvbWVyTG9naW4nIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyUGFzc3dvcmQgICA9PiAnQ3VzdG9tZXJQYXNzJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICAgPT4gJ0N1c3RvbWVyRW1haWwnIC4gJFJhbmRvbUlEIC4gJ0BleGFtcGxlLmNvbScsCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckFkZCgKICAgICAgICAgICAgU291cmNlICA9PiAnQ3VzdG9tZXJVc2VyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICVDdXN0b21lclVzZXIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICAiQ3JlYXRlZCBDdXN0b21lclVzZXJJRCAkQ3VzdG9tZXJVc2VySUQiCiAgICAgICAgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgS2V5ICAgID0+ICdVc2VyTGFuZ3VhZ2UnLAogICAgICAgICAgICBWYWx1ZSAgPT4gJ2VuJywKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBUaWNrZXRzLgogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICAgICAgbXkgQFRpY2tldHM7CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4gMyApIHsKICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgICAgICBteSAkVGlja2V0VGl0bGUgID0gJ1RpY2tldCcgLiAkQ291bnQgLiAkUmFuZG9tSUQ7CiAgICAgICAgICAgIG15ICVUaWNrZXQgICAgICAgPSAoCiAgICAgICAgICAgICAgICBUTiAgICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICRUaWNrZXRUaXRsZSwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJEN1c3RvbWVyQ29tcGFueUlELAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRVc2Vyc1swXS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRVc2Vyc1sxXS0+e1VzZXJJRH0sCgogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIkNyZWF0ZWQgVGlja2V0SUQgJFRpY2tldElEIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBUaWNrZXRzLCB7CiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgPT4gJFRpY2tldFRpdGxlLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBSZWNyZWF0ZSBUaWNrZXRPYmplY3QgdG8gbGV0IGV2ZW50IGhhbmRsZXJzIHJ1biBhbHNvIGZvciB0cmFuc2FjdGlvbiBtb2RlLgogICAgICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICAgICAgT2JqZWN0cyA9PiBbCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIENyZWF0ZSBBcnRpY2xlcy4KICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgICAgICBteSBAQXJ0aWNsZXMgICAgICA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ2hhbm5lbE5hbWUgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ0Zyb20gJyAuICRSYW5kb21JRCAuICcgQSA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgICAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICdUbyAnIC4gJFJhbmRvbUlEIC4gJyBBIDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0ZpcnN0IEFydGljbGUgU3ViamVjdCAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0ZpcnN0IEFydGljbGUgYm9keSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ0VtYWlsQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJ0N1c3RvbWVyIHNlbnQgYW4gZW1haWwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgICA9PiAnSW50ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDAsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnRnJvbSAnIC4gJFJhbmRvbUlEIC4gJyBCIDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJ1RvICcgLiAkUmFuZG9tSUQgLiAnIEIgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnU2Vjb25kIEFydGljbGUgU3ViamVjdCAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ1NlY29uZCBBcnRpY2xlIGJvZHkgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdBZGROb3RlJywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdBZ2VudCBjcmVhdGVkIG5vdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgICA9PiAnRW1haWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ3N5c3RlbScsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ09UUlMgU3lzdGVtIDxvdHJzQGxvY2FsaG9zdD4nLAogICAgICAgICAgICAgICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJ0NjICcgLiAkUmFuZG9tSUQgLiAnIEMgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnVGhpcmQgQXJ0aWNsZSBTdWJqZWN0ICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnVGhpcmQgQXJ0aWNsZSBib2R5ICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnU2VuZEF1dG9SZXBseScsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnU2VudCBhdXRvIHJlcGx5JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSBAQXJ0aWNsZUlEczsKICAgICAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewogICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoCiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSA9PiAkQXJ0aWNsZS0+e0NoYW5uZWxOYW1lfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkVGlja2V0c1swXS0+e0lEfSwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgIkNyZWF0ZWQgQXJ0aWNsZUlEICRBcnRpY2xlSUQiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQEFydGljbGVJRHMsICRBcnRpY2xlSUQ7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSBEeW5hbWljIEZpZWxkcy4KICAgICAgICBteSAkUmFuZG9tTnVtYmVyID0gc3Vic3RyICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpLCAtNzsKICAgICAgICBteSAlRHluYW1pY0ZpZWxkcyA9ICgKICAgICAgICAgICAgRHJvcGRvd24gPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnREZEcm9wZG93bicgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgTGFiZWwgICAgICA9PiAnREZEcm9wZG93bicgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiA5OTkwLAogICAgICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAwID0+ICdOb3RERlNlbGVjdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgMSA9PiAnWWVzREZTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBSZW9yZGVyID0+IDAsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE11bHRpc2VsZWN0ID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0RGTXVsdGlzZWxlY3QnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ0RGTXVsdGlzZWxlY3QnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MCwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ011bHRpc2VsZWN0JywKICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgeWVhciAgPT4gJ3llYXInLAogICAgICAgICAgICAgICAgICAgICAgICBtb250aCA9PiAnbW9udGgnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWVrICA9PiAnd2VlaycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBSZW9yZGVyID0+IDAsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFRleHQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnREZUZXh0JyAuICRSYW5kb21OdW1iZXIsCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgID0+ICdERlRleHQnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MCwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnQXJ0aWNsZScsCiAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFJlb3JkZXIgPT4gMCwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzID0gKAogICAgICAgICAgICBUZXh0ICAgICAgICA9PiAiREZUZXh0JFJhbmRvbUlEIiwKICAgICAgICAgICAgRHJvcGRvd24gICAgPT4gJzEnLAogICAgICAgICAgICBNdWx0aXNlbGVjdCA9PiBbCiAgICAgICAgICAgICAgICAnbW9udGgnLAogICAgICAgICAgICAgICAgJ3llYXInLAogICAgICAgICAgICBdLAogICAgICAgICk7CgogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICBteSBARHluYW1pY0ZpZWxkSURzOwogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkVHlwZSAoIHNvcnQga2V5cyAlRHluYW1pY0ZpZWxkcyApIHsKCiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICAgICAgICAgICAgICV7ICREeW5hbWljRmllbGRzeyREeW5hbWljRmllbGRUeXBlfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgICAgICAiQ3JlYXRlZCBEeW5hbWljRmllbGQgJER5bmFtaWNGaWVsZHN7JER5bmFtaWNGaWVsZFR5cGV9LT57TmFtZX0gLSBJRCAkRHluYW1pY0ZpZWxkSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRJRHMsICREeW5hbWljRmllbGRJRDsKCiAgICAgICAgICAgICMgU2V0IER5bmFtaWNGaWVsZCB2YWx1ZSB0byB0aWNrZXQgb3IgYXJ0aWNsZSBhY2NvcmRpbmdseS4KICAgICAgICAgICAgbXkgJE9iamVjdElEID0gJFRpY2tldHNbMF0tPntJRH07CiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZHN7JER5bmFtaWNGaWVsZFR5cGV9LT57T2JqZWN0VHlwZX0gZXEgJ0FydGljbGUnICkgewogICAgICAgICAgICAgICAgJE9iamVjdElEID0gJEFydGljbGVJRHNbMF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBkeW5hbWljIGZpZWxkLgogICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkc3skRHluYW1pY0ZpZWxkVHlwZX0tPntOYW1lfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZFZhbHVlc3skRHluYW1pY0ZpZWxkVHlwZX07CgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEVuYWJsZSBjcmVhdGVkIER5bmFtaWNGaWVsZHMgdG8gYmUgdmlzaWJsZSBpbiBBZ2VudFRpY2tldFByaW50LgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFByaW50IyMjRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHN7RHJvcGRvd259LT57TmFtZX0gICAgPT4gMSwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRze011bHRpc2VsZWN0fS0+e05hbWV9ID0+IDEsCiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkc3tUZXh0fS0+e05hbWV9ICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIGNyZWF0ZWQgRHluYW1pY0ZpZWxkcyB0byBiZSB2aXNpYmxlIGluIEN1c3RvbWVyVGlja2V0UHJpbnQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0UHJpbnQjIyNEeW5hbWljRmllbGQnLAogICAgICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkc3tEcm9wZG93bn0tPntOYW1lfSAgICA9PiAxLAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHN7TXVsdGlzZWxlY3R9LT57TmFtZX0gPT4gMSwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRze1RleHR9LT57TmFtZX0gICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgVGlja2V0IGF0dHJpYnV0ZXMgaW4gQ3VzdG9tZXJUaWNrZXRab29tIHNjcmVlbiA9PiBDdXN0b21lclRpY2tldFByaW50LgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIE93bmVyICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICA9PiAxLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IDEsCiAgICAgICAgICAgICAgICBTTEEgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgTGluayBmaXJzdCBhbmQgc2Vjb25kIHRpY2tldCBhcyBwYXJlbnQtY2hpbGQuCiAgICAgICAgbXkgJExpbmtPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpOwogICAgICAgIG15ICRTdWNjZXNzICAgID0gJExpbmtPYmplY3QtPkxpbmtBZGQoCiAgICAgICAgICAgIFNvdXJjZU9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgU291cmNlS2V5ICAgID0+ICRUaWNrZXRzWzBdLT57SUR9LAogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGlja2V0c1sxXS0+e0lEfSwKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlRpY2tlZElEICRUaWNrZXRzWzBdLT57SUR9IGFuZCAkVGlja2V0c1sxXS0+e0lEfSBsaW5rZWQgYXMgcGFyZW50LWNoaWxkIgogICAgICAgICk7CgogICAgICAgICMgTGluayBmaXJzdCBhbmQgdGhpcmQgdGlja2V0IGFzIGNoaWxkLXBhcmVudC4KICAgICAgICAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkKAogICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkVGlja2V0c1syXS0+e0lEfSwKICAgICAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICBUYXJnZXRLZXkgICAgPT4gJFRpY2tldHNbMF0tPntJRH0sCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZWRJRCAkVGlja2V0c1syXS0+e0lEfSBhbmQgJFRpY2tldHNbMV0tPntJRH0gbGlua2VkIGFzIHBhcmVudC1jaGlsZCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IFVzZXIgYW5kIGxvZ2luLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFRpY2tldFpvb20gc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfSIpOwoKICAgICAgICAjIENsaWNrIHRvIHByaW50IHRpY2tldCBpbiBBZ2VudCBpbnRlcmZhY2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRUaWNrZXRQcmludDtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfScgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBTd2l0Y2ggdG8gQWdlbnRUaWNrZXRQcmludCBwb3AgdXAgd2luZG93LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBTcGVjaWFsIGFwcHJvYWNoIGlzIHVzZWQgZm9yIHdhaXRpbmcgZm9yIFBERiBkb2N1bWVudCB0byBiZSBsb2FkZWQgZnVsbHkgYmVmb3JlIGNoZWNraW5nIGl0J3MgY29udGVudC4KICAgICAgICAjIFRoaXMgaXMgc3VwcG9ydGVkIGFuZCB0ZXN0ZWQgaW4gTW96aWxsYSBGaXJlZm94IGJyb3dzZXIuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZW5kT2ZDb250ZW50IikubGVuZ3RoID09PSAyJyApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHNjZW5hcmlvcy4KICAgICAgICBteSBAVGVzdHMgPSAoCgogICAgICAgICAgICAjIFRpY2tldCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICJUaWNrZXQjJFRpY2tldHNbMF0tPntOdW1iZXJ9IiwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAiVGlja2V0IyRUaWNrZXRzWzBdLT57TnVtYmVyfSB2YWx1ZSBpcyBjb3JyZWN0IiwKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXRzWzBdLT57VGl0bGV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUaWNrZXRUaXRsZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICJwcmludGVkIGJ5ICRUZXN0VXNlckxvZ2luICRUZXN0VXNlckxvZ2luICgkVGVzdFVzZXJMb2dpblxAbG9jYWx1bml0dGVzdC5jb20pLCIsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ByaW50ZWRCeSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAicHJpbnRlZCBieSAkQ3VzdG9tZXJVc2Vye1VzZXJGaXJzdG5hbWV9ICRDdXN0b21lclVzZXJ7VXNlckxhc3RuYW1lfSIsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ByaW50ZWRCeSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQ3VzdG9tZXInCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnU3RhdGUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdGF0ZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RhdGUgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQWdlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQWdlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJzAgbScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FnZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdBY2NvdW50ZWQgdGltZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FjY291bnRlZCB0aW1lIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnRmlyc3QgUmVzcG9uc2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGaXJzdCBSZXNwb25zZSBUaW1lIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnU29sdXRpb24gVGltZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FjY291bnRlZCB0aW1lIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQcmlvcml0eSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ByaW9yaXR5IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDcmVhdGVkIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUXVldWUgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdRdWV1ZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdMb2NrJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnTG9jayBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0xvY2sgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3VzdG9tZXJJRCBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJJRH0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVySUQgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnT3duZXInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVc2Vyc1swXS0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ093bmVyIGZpcnN0IHJvdyB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICcoJyAuICRVc2Vyc1swXS0+e1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciBzZWNvbmQgcm93IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVXNlcnNbMF0tPntVc2VyTGFzdG5hbWV9IC4gJyknLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciB0aGlyZCByb3cgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVzZXJzWzFdLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUmVzcG9uc2libGUgZmlyc3Qgcm93IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJygnIC4gJFVzZXJzWzFdLT57VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIHNlY29uZCByb3cgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVc2Vyc1sxXS0+e1VzZXJMYXN0bmFtZX0gLiAnKScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIHRoaXJkIHJvdyB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1R5cGUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUeXBlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFR5cGVOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUeXBlIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTZXJ2aWNlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTZXJ2aWNlIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1NMQScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1NMQSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTTEFOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTTEEgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIFRpY2tldCBEeW5hbWljIEZpZWxkcy4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICREeW5hbWljRmllbGRze0Ryb3Bkb3dufS0+e0xhYmVsfSAuICc6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRHluYW1pY0ZpZWxkIERyb3Bkb3duIGxhYmVsIGlzIGNvcnJlY3QgZm9yIFRpY2tldCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnWWVzREZTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0R5bmFtaWNGaWVsZCBEcm9wZG93biB2YWx1ZSBpcyBjb3JyZWN0IGZvciBUaWNrZXQnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJER5bmFtaWNGaWVsZHN7TXVsdGlzZWxlY3R9LT57TGFiZWx9IC4gJzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgTXVsdGlzZWxlY3QgbGFiZWwgaXMgY29ycmVjdCBmb3IgVGlja2V0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdtb250aCwgeWVhcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0R5bmFtaWNGaWVsZCBNdWx0aXNlbGVjdCB2YWx1ZSBpcyBjb3JyZWN0IGZvciBUaWNrZXQnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBMaW5rZWQgT2JqZWN0cy4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdQYXJlbnQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUGFyZW50OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHNbMl0tPntOdW1iZXJ9IC4gJzogJyAuICRUaWNrZXRzWzJdLT57TmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1BhcmVudDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDaGlsZDonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDaGlsZDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXRzWzFdLT57TnVtYmVyfSAuICc6ICcgLiAkVGlja2V0c1sxXS0+e05hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDaGlsZDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQ3VzdG9tZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ3VzdG9tZXIgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDdXN0b21lciBJbmZvcm1hdGlvbiBoZWFkZXIgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnRmlyc3RuYW1lOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0ZpcnN0bmFtZTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJVc2Vye1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGaXJzdG5hbWU6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0xhc3RuYW1lOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0xhc3RuYW1lOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnTGFzdG5hbWU6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1VzZXJuYW1lOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1VzZXJuYW1lOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVXNlcm5hbWU6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0VtYWlsOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0VtYWlsOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckVtYWlsfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRW1haWw6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0N1c3RvbWVyOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVyOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55TmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVyOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdTdHJlZXQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RyZWV0OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55U3RyZWV0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RyZWV0OiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdaaXA6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnWmlwOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55WklQfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnWmlwOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDaXR5OicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NpdHk6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1c3RvbWVyQ29tcGFueXtDdXN0b21lckNvbXBhbnlDaXR5fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ2l0eTogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ291bnRyeTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDb3VudHJ5OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55Q291bnRyeX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NvdW50cnk6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1VSTDonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdVUkw6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1c3RvbWVyQ29tcGFueXtDdXN0b21lckNvbXBhbnlVUkx9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdVUkw6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0NvbW1lbnQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ29tbWVudDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVyQ29tcGFueUNvbW1lbnR9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDb21tZW50OiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQXJ0aWNsZSAjMyBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdGcm9tOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0Zyb206IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ09UUlMgU3lzdGVtJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRnJvbTogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdUbzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUbzogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ2M6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRnJvbTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ2MgJyAuICRSYW5kb21JRCAuICcgQycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NjOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzMnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1N1YmplY3Q6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3ViamVjdDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMl0tPntTdWJqZWN0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3ViamVjdDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDcmVhdGVkOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NyZWF0ZWQ6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ2J5IHN5c3RlbScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NyZWF0ZWQ6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMycsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMl0tPntCb2R5fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQm9keTogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQXJ0aWNsZSAjMiBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdGcm9tICcgLiAkUmFuZG9tSUQgLiAnIEInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzInLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnVG8gJyAuICRSYW5kb21JRCAuICcgQicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1RvOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzInLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMV0tPntTdWJqZWN0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3ViamVjdDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMyJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ2J5IGFnZW50JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMyJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEFydGljbGVzWzFdLT57Qm9keX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0JvZHk6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMicsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQXJ0aWNsZSAjMSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdGcm9tICcgLiAkUmFuZG9tSUQgLiAnIEEnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1RvICcgLiAkUmFuZG9tSUQgLiAnIEEnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUbzogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMxJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1swXS0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdWJqZWN0OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ2J5IGN1c3RvbWVyJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMxJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICREeW5hbWljRmllbGRze1RleHR9LT57TGFiZWx9IC4gJzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgVGV4dCBsYWJlbCBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3tUZXh0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRHluYW1pY0ZpZWxkIFRleHQgdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMxJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1swXS0+e0JvZHl9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdCb2R5OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBQYWdpbmF0aW9uLgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1BhZ2UgMScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1BhZ2UgMSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdQYWdlIDInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQYWdlIDIgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSB2YWx1ZXMgaW4gQWdlbnRUaWNrZXRQcmludC4KICAgICAgICBteSAkQWdlbnRQYWdlU291cmNlID0gJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKTsKCiAgICAgICAgZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0ludGVyZmFjZX0gZXEgJ0FsbCcgfHwgJFRlc3QtPntJbnRlcmZhY2V9IGVxICdBZ2VudCcgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICBpbmRleCggJEFnZW50UGFnZVNvdXJjZSwgJFRlc3QtPntWYWx1ZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICdBZ2VudCAtICcgLiAkVGVzdC0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDbG9zZSBBZ2VudFRpY2tldFByaW50IFBERiBwb3AgdXAgd2luZG93IGFuZCBzd2l0Y2ggd2luZG93LgogICAgICAgICRTZWxlbml1bS0+Y2xvc2UoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKCiAgICAgICAgIyBMb2dpbiBjdXN0b21lciB1c2VyLgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJEN1c3RvbWVyVXNlcntVc2VyUGFzc3dvcmR9LAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQ3VzdG9tZXJUaWNrZXRab29tIG9mIGNyZWF0ZWQgZmlyc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWN1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lclRpY2tldFpvb207VGlja2V0TnVtYmVyPSRUaWNrZXRzWzBdLT57TnVtYmVyfSIKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIHRvIHByaW50IHRpY2tldCBpbiBDdXN0b21lciBpbnRlcmZhY2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQ3VzdG9tZXJUaWNrZXRQcmludDtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfScgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIFNwZWNpYWwgYXBwcm9hY2ggaXMgdXNlZCBmb3Igd2FpdGluZyBmb3IgUERGIGRvY3VtZW50IHRvIGJlIGxvYWRlZCBmdWxseSBiZWZvcmUgY2hlY2tpbmcgaXQncyBjb250ZW50LgogICAgICAgICMgQ3VycmVudGx5IHRoaXMgaXMgc3VwcG9ydGVkIGluIE1vemlsbGEgRmlyZWZveCBicm93c2VyLgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImVuZE9mQ29udGVudCIpLmxlbmd0aCA9PT0gMScgKTsKCiAgICAgICAgIyBWZXJpZnkgdmFsdWVzIGluIEN1c3RvbWVyVGlja2V0UHJpbnQuCiAgICAgICAgbXkgJEN1c3RvbWVyUGFnZVNvdXJjZSA9ICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCk7CgogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICAgICAgICAgIGlmICggJFRlc3QtPntJbnRlcmZhY2V9IGVxICdBbGwnIHx8ICRUZXN0LT57SW50ZXJmYWNlfSBlcSAnQ3VzdG9tZXInICkgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRDdXN0b21lclBhZ2VTb3VyY2UsICRUZXN0LT57VmFsdWV9ICkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAnQ3VzdG9tZXIgLSAnIC4gJFRlc3QtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkVGVzdC0+e0ludGVyZmFjZX0gZXEgJ0FnZW50JyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIGluZGV4KCAkQ3VzdG9tZXJQYWdlU291cmNlLCAkVGVzdC0+e1ZhbHVlfSApID09IC0xLAogICAgICAgICAgICAgICAgICAgICdDdXN0b21lciAtICcgLiAkVGVzdC0+e01lc3NhZ2V9IC4gJyAtIG5vdCB2aXNpYmxlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRGVsZXRlIHRlc3QgVGlja2V0cy4KICAgICAgICBmb3IgbXkgJFRpY2tldCAoIHJldmVyc2UgQFRpY2tldHMgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldC0+e0lEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGlja2V0SUQgJFRpY2tldC0+e0lEfSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgRGVsZXRlIHRlc3QgRHluYW1pY0ZpZWxkcy4KICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZElEIChARHluYW1pY0ZpZWxkSURzKSB7CgogICAgICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICAgICAgICAgIElEICAgICA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGQgSUQgJER5bmFtaWNGaWVsZElEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBEZWxldGUgdGVzdCBkYXRhIGZyb20gdGhlIERCLgogICAgICAgIG15IEBEZWxldGVEYXRhID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBjdXN0b21lcl91c2VyIFdIRVJFIGxvZ2luID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlcklEICRDdXN0b21lclVzZXJJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gY3VzdG9tZXJfY29tcGFueSBXSEVSRSBjdXN0b21lcl9pZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkQ3VzdG9tZXJDb21wYW55SUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDdXN0b21lckNvbXBhbnlJRCAkQ3VzdG9tZXJDb21wYW55SUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHRpY2tldF90eXBlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUeXBlSUQgJFR5cGVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNlcnZpY2UtU0xBIHJlbGF0aW9uIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU0xBSUQgJFNMQUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZSBwcmVmZXJlbmNlcyBmb3IgJFNlcnZpY2VJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKIyAtLS0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZUlEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgICAgICBmb3IgbXkgJEl0ZW0gKEBEZWxldGVEYXRhKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJEl0ZW0tPntTUUx9LAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkSXRlbS0+e0JpbmR9IF0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAkSXRlbS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhciBjYWNoZS4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgpOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSBiNGIwZThkYjRkMmJhMzdiYWQ0YTJkMzBiY2Y3NjNmNjgwMjE3MTc2IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9QcmVmZXJlbmNlcy9BZ2VudC9DdXN0b21TZXJ2aWNlLnQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBlbmFibGUgdGhlIHNlcnZpY2VzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+ICcxJywKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IGtlZXAgY2hpbGRyZW4gc2VydmljZXMKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlOjpLZWVwQ2hpbGRyZW4nLAogICAgICAgICAgICBWYWx1ZSA9PiAnMCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRlc3QgdXNlciBJRAogICAgICAgIG15ICRUZXN0VXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNlcnZpY2Ugb2JqZWN0CiAgICAgICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKICAgICAgICAjIGNyZWF0ZSB0d28gdGVzdCBzZXJ2aWNlcwogICAgICAgIG15IEBTZXJ2aWNlSURzOwogICAgICAgIG15IEBTZXJ2aWNlTmFtZXM7CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlIChxdyhQYXJlbnQgQ2hpbGQpKSB7CiAgICAgICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZXJ2aWNlIC4gJ1NlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwgICAgICAgICAgICAgICAgICMgaW52YWxpZAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAnU2VsZW5pdW0gVGVzdCcsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAgICRTZXJ2aWNlSUQ7CiAgICAgICAgICAgIHB1c2ggQFNlcnZpY2VOYW1lcywgJFNlcnZpY2VOYW1lOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgc2Vjb25kIHNlcnZpY2UgdG8gYmUgY2hpbGQgb2YgZmlyc3Qgb25lIGFuZCBlbmFibGUgaXQKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRHNbMV0sCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVzWzFdLAogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEc1sxXSBpcyBub3cgY2hpbGQgc2VydmljZSIKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgZ28gdG8gYWdlbnQgcHJlZmVyZW5jZXMKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRQcmVmZXJlbmNlcztTdWJhY3Rpb249R3JvdXA7R3JvdXA9Tm90aWZpY2F0aW9uU2V0dGluZ3MiCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgY2hpbGQgc2VydmljZSBpcyBub3Qgc2hvd24KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjU2VydmljZUlEIG9wdGlvblt2YWx1ZT1cIiRTZXJ2aWNlSURzWzFdXCJdJykubGVuZ3RoOyIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgJ0NoaWxkIHNlcnZpY2UgaXMgbm90IHNob3duJywKICAgICAgICApOwoKICAgICAgICAjIHR1cm4gb24ga2VlcCBjaGlsZHJlbiBzZXR0aW5nCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJywKICAgICAgICAgICAgVmFsdWUgPT4gJzEnLAogICAgICAgICk7CgogICAgICAgICMgcmVmcmVzaCB0aGUgcGFnZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFByZWZlcmVuY2VzO1N1YmFjdGlvbj1Hcm91cDtHcm91cD1Ob3RpZmljYXRpb25TZXR0aW5ncyIKICAgICAgICApOwoKICAgICAgICAjIHZlcmlmeSBjaGlsZCBzZXJ2aWNlIGlzIHNob3duIChidWcjMTE4MTYpCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1NlcnZpY2VJRCBvcHRpb25bdmFsdWU9XCIkU2VydmljZUlEc1sxXVwiXScpLmxlbmd0aDsiCiAgICAgICAgICAgICksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICdDaGlsZCBzZXJ2aWNlIGlzIHNob3duJywKICAgICAgICApOwoKICAgICAgICAjIGFkZCBjaGlsZCBzZXJ2aWNlIHRvICdNeSBTZXJ2aWNlcycgcHJlZmVyZW5jZQogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1NlcnZpY2VJRCcpLnZhbCgnJFNlcnZpY2VJRHNbMV0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwoKICAgICAgICAjIHNhdmUgdGhlIHNldHRpbmcsIHdhaXQgZm9yIHRoZSBhamF4IGNhbGwgdG8gZmluaXNoIGFuZCBjaGVjayBpZiBzdWNjZXNzIHNpZ24gaXMgc2hvd24KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZXJ2aWNlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuZmluZCgnLlNldHRpbmdVcGRhdGVCb3gnKS5maW5kKCdidXR0b24nKS50cmlnZ2VyKCdjbGljaycpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1NlcnZpY2VJRCcpLmNsb3Nlc3QoJy5XaWRnZXRTaW1wbGUnKS5oYXNDbGFzcygnSGFzT3ZlcmxheScpIgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjU2VydmljZUlEJykuY2xvc2VzdCgnLldpZGdldFNpbXBsZScpLmZpbmQoJy5mYS1jaGVjaycpLmxlbmd0aCIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiAhXCQoJyNTZXJ2aWNlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuaGFzQ2xhc3MoJ0hhc092ZXJsYXknKSIKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgcGVyc29uYWwgc2VydmljZXMgY29ubmVjdGlvbgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBwZXJzb25hbF9zZXJ2aWNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRHNbMV0iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRGVsZXRlIHBlcnNvbmFsIHNlcnZpY2UgY29ubmVjdGlvbiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHNlcnZpY2VzCiAgICAgICAgZm9yIG15ICRJbmRleCAoIDAgLi4gMSApIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRHNbJEluZGV4XSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRGVsZXRlIHNlcnZpY2UgLSAkU2VydmljZUlEc1skSW5kZXhdIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NlcnZpY2UnLAogICAgICAgICk7CiAgICB9LAopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAzNDJkMWYxNTdhYWJhM2EzMjVjYzNkNjg0ODg4ZGMxOTQzZWY5MjVjIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9UaWNrZXRab29tL1RpY2tldEluZm9ybWF0aW9uLnQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CnVzZSBQT1NJWCBxdyggZmxvb3IgKTsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICAgICAgbXkgJEhlbHBlciAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgZGlzYWJsZSAnVGlja2V0IEluZm9ybWF0aW9uJywgJ0N1c3RvbWVyIEluZm9ybWF0aW9uJyBhbmQgJ0xpbmtlZCBPYmplY3RzJyB3aWRnZXRzIGluIEFnZW50VGlja2V0Wm9vbSBzY3JlZW4KICAgICAgICBmb3IgbXkgJFdpZGdldERpc2FibGUgKHF3KDAxMDAtVGlja2V0SW5mb3JtYXRpb24gMDIwMC1DdXN0b21lckluZm9ybWF0aW9uIDAzMDAtTGlua1RhYmxlKSkgewogICAgICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMCwKICAgICAgICAgICAgICAgIEtleSAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20jIyNXaWRnZXRzIyMjJFdpZGdldERpc2FibGUiLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGVuYWJsZSB0aWNrZXQgc2VydmljZSwgdHlwZSwgcmVzcG9uc2libGUKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAxCiAgICAgICAgKTsKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAxCiAgICAgICAgKTsKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpSZXNwb25zaWJsZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpSZXNwb25zaWJsZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEKICAgICAgICApOwoKICAgICAgICAjIHVzZSBhIGNhbGVuZGFyIHdpdGggdGhlIHNhbWUgYnVzaW5lc3MgaG91cnMgZm9yIGV2ZXJ5IGRheSBzbyB0aGF0IHRoZSBVVCBydW5zIGNvcnJlY3RseQogICAgICAgICMgb24gZXZlcnkgZGF5IG9mIHRoZSB3ZWVrIGFuZCBvdXRzaWRlIHVzdWFsIGJ1c2luZXNzIGhvdXJzLgogICAgICAgIG15ICVXZWVrOwogICAgICAgIG15IEBEYXlzID0gcXcoU3VuIE1vbiBUdWUgV2VkIFRodSBGcmkgU2F0KTsKICAgICAgICBmb3IgbXkgJERheSAoQERheXMpIHsKICAgICAgICAgICAgJFdlZWt7JERheX0gPSBbIDAgLi4gMjMgXTsKICAgICAgICB9CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVXb3JraW5nSG91cnMnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJVdlZWssCiAgICAgICAgKTsKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGltZVdvcmtpbmdIb3VycycsCiAgICAgICAgICAgIFZhbHVlID0+IFwlV2VlaywKICAgICAgICApOwoKICAgICAgICAjIGRpc2FibGUgZGVmYXVsdCBWYWNhdGlvbiBkYXlzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVWYWNhdGlvbkRheXMnLAogICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICApOwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaW1lVmFjYXRpb25EYXlzJywKICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgcmVzcG9uc2libGUgdXNlcgogICAgICAgIG15ICRSZXNwb25zaWJsZVVzZXIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIHJlc3BvbnNpYmxlIElECiAgICAgICAgbXkgJFJlc3BvbnNpYmxlVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkUmVzcG9uc2libGVVc2VyLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGxvZ2luIHVzZXIKICAgICAgICBteSAkVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICMgZ2V0IHRlc3QgdXNlciBsb2dpbiBJRAogICAgICAgIG15ICRVc2VyTG9naW5JRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHRpY2tldCBkYXRhCiAgICAgICAgbXkgJFJhbmRvbUlEICAgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICVUaWNrZXREYXRhID0gKAogICAgICAgICAgICBBZ2UgICAgICAgICAgID0+ICcwIG0nLAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICJUeXBlJFJhbmRvbUlEIiwKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAiU2VydmljZSRSYW5kb21JRCIsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gIlNMQSRSYW5kb21JRCIsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gIlF1ZXVlJFJhbmRvbUlEIiwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgTG9ja2VkICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkUmVzcG9uc2libGVVc2VyLAogICAgICAgICAgICBDcmVhdGVkQnlVc2VyID0+ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSggVXNlcklEID0+ICRVc2VyTG9naW5JRCApLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHR5cGUgb2JqZWN0CiAgICAgICAgbXkgJFR5cGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHR5cGUKICAgICAgICBteSAkVHlwZUlEID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRpY2tldERhdGF7VHlwZX0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUeXBlSUQsCiAgICAgICAgICAgICJUeXBlSUQgJFR5cGVJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgICMgZ2V0IHF1ZXVlIG9iamVjdAogICAgICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHF1ZXVlCiAgICAgICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJFRpY2tldERhdGF7UXVldWV9LAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgICAgICAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgICAgICAgICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICA9PiAnU2VsZW5pdW0gUXVldWUnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUXVldWVJRCwKICAgICAgICAgICAgIlF1ZXVlSUQgJFF1ZXVlSUQgaXMgY3JlYXRlZCIKICAgICAgICApOwojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNlcnZpY2VUeXBlTGlzdCB9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXsgJFNMQVR5cGVMaXN0IH07CiMgLS0tCgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRUaWNrZXREYXRhe1NlcnZpY2V9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1NlbGVuaXVtIFNlcnZpY2UnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgIlNlcnZpY2VJRCAkU2VydmljZUlEIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBTTEEgd2l0aCBsb3cgZXNjYWxhdGlvbiB0aW1lcywgc28gd2UgdHJpZ2dlciB3YXJuaW5nIGluICdUaWNrZXQgSW5mb3JtYXRpb24nIHdpZGdldAogICAgICAgIG15ICVFc2NhbGF0aW9uVGltZXMgPSAoCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDMwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgPT4gNTAsCiAgICAgICAgKTsKICAgICAgICBteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgPT4gWyRTZXJ2aWNlSURdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAkVGlja2V0RGF0YXtTTEF9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAojIC0tLQogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSA9PiAkRXNjYWxhdGlvblRpbWVze0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gJEVzY2FsYXRpb25UaW1lc3tVcGRhdGVUaW1lfSwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgPT4gJEVzY2FsYXRpb25UaW1lc3tTb2x1dGlvblRpbWV9LAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICA9PiAnU2VsZW5pdW0gU0xBJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICJTTEFJRCAkU0xBSUQgaXMgY3JlYXRlZCIKICAgICAgICApOwoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIG9iamVjdHMKICAgICAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZFZhbHVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZFZhbHVlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICREeW5hbWljRmllbGROYW1lID0gIkRGVGV4dCRSYW5kb21JRCI7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZElEICAgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgIExhYmVsICAgICAgPT4gIkRGTGFiZWwiLAogICAgICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTEsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZElELAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkSUQgJER5bmFtaWNGaWVsZElEIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBlbmFibGUgdGVzdCBkeW5hbWljIGZpZWxkIHRvIHNob3cgaW4gQWdlbnRUaWNrZXRab29tIHNjcmVlbiBpbiAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIyMjRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZE5hbWUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0aWNrZXQKICAgICAgICBteSAkQ3VzdG9tZXIgICAgPSAiQ3VzdG9tZXIkUmFuZG9tSUQiOwogICAgICAgIG15ICRUaXRsZVJhbmRvbSA9ICJUaXRsZSRSYW5kb21JRCI7CiAgICAgICAgbXkgJFRpY2tldElEICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICRUaXRsZVJhbmRvbSwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkVGlja2V0RGF0YXtRdWV1ZX0sCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgTG9jayAgICAgICAgICA9PiAkVGlja2V0RGF0YXtMb2NrZWR9LAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICRUaWNrZXREYXRhe1ByaW9yaXR5fSwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkVGlja2V0RGF0YXtTdGF0ZX0sCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJEN1c3RvbWVyLAogICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZVVzZXJJRCwKICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkVXNlckxvZ2luSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJMb2dpbklELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUaWNrZXRJRCwKICAgICAgICAgICAgIlRpY2tldElEICRUaWNrZXRJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBkeW5hbWljIGZpZWxkIHZhbHVlIHRvIHRoZSB0ZXN0IHRpY2tldAogICAgICAgIG15ICRERlZhbHVlID0gIkRGVmFsdWVUZXh0JFJhbmRvbUlEIjsKICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRWYWx1ZU9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIEZpZWxkSUQgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBPYmplY3RJRCAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICBWYWx1ZSAgICAgID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBWYWx1ZVRleHQgPT4gJERGVmFsdWUsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkIHZhbHVlIGFkZGVkIHRvIHRoZSB0ZXN0IHRpY2tldCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBsb2dpbiB0ZXN0IHVzZXIKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudFRpY2tldFpvb20gZm9yIHRlc3QgY3JlYXRlZCB0aWNrZXQKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFRpY2tldElEIik7CgogICAgICAgICMgdmVyaWZ5IGl0cyByaWdodCBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICJUaWNrZXQgJFRpdGxlUmFuZG9tIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CgogICAgICAgICMgdmVyaWZ5IHRoZXJlIGlzIG5vICdUaWNrZXQgSW5mb3JtYXRpb24nIHdpZGdldCwgaXQncyBkaXNhYmxlZAogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRUaWNrZXREYXRhe1NlcnZpY2V9IiApID09IC0xLAogICAgICAgICAgICAiVGlja2V0IEluZm9ybWF0aW9uIHdpZGdldCBpcyBkaXNhYmxlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXNldCAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQgc3lzY29uZmlnLCBlbmFibGUgaXQgYW5kIHJlZnJlc2ggc2NyZWVuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSMjI1dpZGdldHMjIyMwMTAwLVRpY2tldEluZm9ybWF0aW9uJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgJ0xvY2F0aW9uJyA9PiAnU2lkZWJhcicsCiAgICAgICAgICAgICAgICAnTW9kdWxlJyAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6VGlja2V0SW5mb3JtYXRpb24nLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgdmVyaWZ5IHRoZXJlIGlzICdUaWNrZXQgSW5mb3JtYXRpb24nIHdpZGdldCwgaXQncyBlbmFibGVkCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJy5IZWFkZXI+aDInLCAnY3NzJyApLT5nZXRfdGV4dCgpLAogICAgICAgICAgICAnVGlja2V0IEluZm9ybWF0aW9uJywKICAgICAgICAgICAgJ1RpY2tldCBJbmZvcm1hdGlvbiB3aWRnZXQgaXMgZW5hYmxlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhlcmUgaXMgbm8gY29sbGFwc2VkIGVsZW1lbnRzIG9uIHRoZSBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W2NvbnRhaW5zKFxAY2xhc3MsIFwnV2lkZ2V0U2ltcGxlIEV4cGFuZGVkJyldIiksCiAgICAgICAgICAgICJUaWNrZXQgSW5mb3JtYXRpb24gV2lkZ2V0IGlzIGV4cGFuZGVkIiwKICAgICAgICApOwoKICAgICAgICAjIHRvZ2dsZSB0byBjb2xsYXBzZSAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAdGl0bGUsIFwnU2hvdyBvciBoaWRlIHRoZSBjb250ZW50JyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgdmVyaWZ5IHRoZXJlIGlzIGNvbGxhcHNlZCBlbGVtZW50IG9uIHRoZSBzY3JlZW4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W2NvbnRhaW5zKFxAY2xhc3MsIFwnV2lkZ2V0U2ltcGxlIENvbGxhcHNlZCcpXSIpLAogICAgICAgICAgICAiVGlja2V0IEluZm9ybWF0aW9uIFdpZGdldCBpcyBjb2xsYXBzZWQiLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGFydGljbGUgdG8gdGlja2V0CiAgICAgICAgbXkgJEFydGljbGVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGU6OkJhY2tlbmQ6OkVtYWlsJyktPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ3NvbWUgc2hvcnQgZGVzY3JpcHRpb24nLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIENoYXJzZXQgICAgICAgICAgICAgID0+ICdJU08tODg1OS0xNScsCiAgICAgICAgICAgIE1pbWVUeXBlICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ0VtYWlsQ3VzdG9tZXInLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQXJ0aWNsZUlELAogICAgICAgICAgICAiQXJ0aWNsZUlEICRBcnRpY2xlSUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgYWNjb3VudGVkIHRpbWUgdG8gdGhlIHRpY2tldAogICAgICAgIG15ICRBY2NvdW50ZWRUaW1lID0gMTIzOwogICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNjb3VudFRpbWUoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICBUaW1lVW5pdCAgPT4gJEFjY291bnRlZFRpbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiQWNjb3VudGVkIFRpbWUgJEFjY291bnRlZFRpbWUgYWRkZWQgdG8gdGlja2V0IgogICAgICAgICk7CgogICAgICAgICMgcmVmcmVzaCBzY3JlZW4gdG8gZ2V0IGFjY291bnRlZCB0aW1lIHZhbHVlCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyB2ZXJpZnkgJ1RpY2tldCBJbmZvcm1hdGlvbicgd2lkZ2V0IHZhbHVlcwogICAgICAgIGZvciBteSAkVGlja2V0SW5mb3JtYXRpb25DaGVjayAoIHNvcnQga2V5cyAlVGlja2V0RGF0YSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9wW2NvbnRhaW5zKFxAdGl0bGUsIFwnJFRpY2tldERhdGF7JFRpY2tldEluZm9ybWF0aW9uQ2hlY2t9JyApXSIpLAogICAgICAgICAgICAgICAgIiRUaWNrZXRJbmZvcm1hdGlvbkNoZWNrIC0gJFRpY2tldERhdGF7JFRpY2tldEluZm9ybWF0aW9uQ2hlY2t9IGZvdW5kIGluIFRpY2tldCBJbmZvcm1hdGlvbiB3aWRnZXQiCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHZlcmlmeSBjdXN0b21lciBsaW5rIHRvICdDdXN0b21lciBJbmZvcm1hdGlvbiBDZW50ZXInCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcjtDdXN0b21lcklEPSRDdXN0b21lcicgKV0iKSwKICAgICAgICAgICAgIkN1c3RvbWVyIGxpbmsgdG8gJ0N1c3RvbWVyIEluZm9ybWF0aW9uIENlbnRlcicgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgdmVyaWZ5IGFjY291bnRlZCB0aW1lIHZhbHVlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCBxcXw8cCBjbGFzcz0iVmFsdWUiPiRBY2NvdW50ZWRUaW1lPC9wPnwgKSA+IC0xLAogICAgICAgICAgICAiQWNjb3VudGVkIFRpbWUgZm91bmQgaW4gVGlja2V0IEluZm9ybWF0aW9uIFdpZGdldCIsCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgZHluYW1pYyBmaWVsZCB2YWx1ZSBpbiAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vc3Bhbltjb250YWlucyhcQHRpdGxlLCBcJyRERlZhbHVlJyApXSIpLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkIHZhbHVlIC0gJERGVmFsdWUgZm91bmQgaW4gVGlja2V0IEluZm9ybWF0aW9uIHdpZGdldCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBSZWNyZWF0ZSBUaWNrZXRPYmplY3QgdG8gbGV0IGV2ZW50IGhhbmRsZXJzIHJ1biBhbHNvIGZvciB0cmFuc2FjdGlvbiBtb2RlLgogICAgICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICAgICAgT2JqZWN0cyA9PiBbCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgICAgICMgcmVmcmVzaCBzY3JlZW4gdG8gYmUgc3VyZSBlc2NhbGF0aW9uIHRpbWUgd2lsbCBnZXQgbGF0ZXN0IHRpbWVzCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyBnZXQgdGlja2V0IGRhdGEgZm9yIGVzY2FsYXRpb24gdGltZSB2YWx1ZXMKICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEV4dGVuZGVkID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgZXNjYWxhdGlvbiB0aW1lcywgd2FybmluZyBzaG91bGQgYmUgYWN0aXZlCiAgICAgICAgZm9yIG15ICRFc2NhbGF0aW9uVGltZSAoIHNvcnQga2V5cyAlRXNjYWxhdGlvblRpbWVzICkgewogICAgICAgICAgICAkRXNjYWxhdGlvblRpbWUgPSBmbG9vciggJFRpY2tldHskRXNjYWxhdGlvblRpbWV9IC8gNjAgKTsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgd2FybmluZyBpcyB2aXNpYmxlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAoKICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIEVzY2FsYXRpb25UaW1lIG9yIEVzY2FsYXRpb25UaW1lICsgMSAob25lIG1pbnV0ZSB0b2xlcmFuY2UsIHNpbmNlIGl0IGZhaWxzIG9uIGZhc3Qgc3lzdGVtcykKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICIvL3BbXEBjbGFzcz0nV2FybmluZyddW1xAdGl0bGU9J1NlcnZpY2UgVGltZTogJEVzY2FsYXRpb25UaW1lIG0nIG9yIFxAdGl0bGU9J1NlcnZpY2UgVGltZTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICggJEVzY2FsYXRpb25UaW1lICsgMSApIC4gIiBtJ10iCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIkVzY2FsYXRpb24gVGltZSAkRXNjYWxhdGlvblRpbWUgbSAsIGZvdW5kIGluIFRpY2tldCBJbmZvcm1hdGlvbiBXaWRnZXQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjbGVhbnVwIHRlc3QgZGF0YQogICAgICAgICMgZGVsZXRlIGR5bmFtaWMgZmllbGQgdmFsdWUKICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRWYWx1ZU9iamVjdC0+VmFsdWVEZWxldGUoCiAgICAgICAgICAgIEZpZWxkSUQgID0+ICREeW5hbWljRmllbGRJRCwKICAgICAgICAgICAgT2JqZWN0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkIHZhbHVlIHJlbW92ZWQgZnJvbSB0aGUgdGVzdCB0aWNrZXQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGR5bmFtaWMgZmllbGQKICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGRJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJEeW5hbWljRmllbGRJRCAkRHluYW1pY0ZpZWxkSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCB0aWNrZXQKICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGlja2V0SUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGdldCBkZWxldGUgdGVzdCBkYXRhCiAgICAgICAgbXkgQERlbGV0ZURhdGEgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHRpY2tldF90eXBlIFdIRVJFIGlkID0gJFR5cGVJRCIsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUeXBlSUQgJFR5cGVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gJFNMQUlEIiwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNlcnZpY2UtU0xBIHJlbGF0aW9uIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSAkU0xBSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU0xBSUQgJFNMQUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZSBwcmVmZXJlbmNlcyBmb3IgJFNlcnZpY2VJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKIyAtLS0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZUlEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgaXRlbXMKICAgICAgICBmb3IgbXkgJEl0ZW0gKEBEZWxldGVEYXRhKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAkSXRlbS0+e1NRTH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAkSXRlbS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KCBUaWNrZXQgVHlwZSBTTEEgU2VydmljZSBRdWV1ZSBEeW5hbWljRmllbGQgKSkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAkQ2FjaGUgKTsKICAgICAgICB9CgogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSAxNDM1N2U2Yjc2ODc0MWYxM2UwOTg5YjIzMjBiZDEwOGE0NWY0YjYwIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9Ub29sQmFyL1RpY2tldFNlcnZpY2UudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgICAgIG15ICRHcm91cE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgIyBHZXQgcmFuZG9tIHZhcmlhYmxlLgogICAgICAgIG15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgICAgICMgRW5hYmxlIEFnZW50VGlja2V0U2VydmljZSB0b29sYmFyIGljb24uCiAgICAgICAgbXkgJUFnZW50VGlja2V0U2VydmljZSA9ICgKICAgICAgICAgICAgQ3NzQ2xhc3MgPT4gJ1NlcnZpY2VWaWV3JywKICAgICAgICAgICAgSWNvbiAgICAgPT4gJ2ZhIGZhLXdyZW5jaCcsCiAgICAgICAgICAgIE1vZHVsZSAgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VG9vbEJhcjo6VGlja2V0U2VydmljZScsCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICcxMDMwMDM1JywKICAgICAgICApOwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUjIyMyMDAtVGlja2V0OjpBZ2VudFRpY2tldFNlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJUFnZW50VGlja2V0U2VydmljZSwKICAgICAgICApOwoKICAgICAgICAjIEFsbG93cyBkZWZpbmluZyBzZXJ2aWNlcyBmb3IgdGlja2V0cy4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHNlcnZpY2UuCiAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJ1NlbGVuaXVtJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgIlNlcnZpY2UgSUQgJFNlcnZpY2VJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgZ3JvdXAuCiAgICAgICAgbXkgJEdyb3VwTmFtZSA9ICJHcm91cCIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRHcm91cElEICAgPSAkR3JvdXBPYmplY3QtPkdyb3VwQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRHcm91cE5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRHcm91cElELAogICAgICAgICAgICAiR3JvdXAgSUQgJEdyb3VwSUQgaXMgY3JlYXRlZCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHF1ZXVlLgogICAgICAgIG15ICRRdWV1ZU5hbWUgPSAnUXVldWUnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRRdWV1ZUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgR3JvdXBJRCAgICAgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgICAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgPT4gJ1NlbGVuaXVtIFF1ZXVlJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgICAgICJRdWV1ZSBJRCAkUXVldWVJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdGlja2V0LgogICAgICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnU2VsZW5pdW0gdGVzdCB0aWNrZXQnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIExvY2sgICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJ1NlbGVuaXVtQ3VzdG9tZXJJRCcsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJ3Rlc3RAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICRHcm91cE5hbWUgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBHZXQgdGVzdCB1c2VyIElELgogICAgICAgIG15ICRUZXN0VXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgVXBkYXRlICdNeSBTZXJ2aWNlJyBwcmVmZXJlbmNlIGZvciB0ZXN0IGNyZWF0ZWQgdXNlci4KICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgICAgICBteSAkU3VjY2VzcyAgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gcGVyc29uYWxfc2VydmljZXMgKHNlcnZpY2VfaWQsIHVzZXJfaWQpCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8pCiAgICAgICAgICAgICcsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCwgXCRUZXN0VXNlcklEIF0KICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgJ015IHNlcnZpY2UgcHJlZmVyZW5jZSB1cGRhdGVkIGZvciB0ZXN0IHVzZXInCiAgICAgICAgKTsKCiAgICAgICAgIyBMb2dpbiB0ZXN0IHVzZXIuCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudERhc2hib2FyZCIpOwoKICAgICAgICAjIENsaWNrIG9uIHRvb2wgYmFyIEFnZW50VGlja2V0U2VydmljZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAdGl0bGUsIFwnVGlja2V0cyBpbiBNeSBTZXJ2aWNlczpcJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgVmVyaWZ5IHRoYXQgdGVzdCBpcyBvbiB0aGUgY29ycmVjdCBzY3JlZW4uCiAgICAgICAgbXkgJEV4cGVjdGVkVVJMID0gIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VydmljZSI7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9jdXJyZW50X3VybCgpLCAkRXhwZWN0ZWRVUkwgKSA+IC0xLAogICAgICAgICAgICAiVG9vbEJhciBpY29uICdUaWNrZXQgaW4gbXkgU2VydmljZXMnIHNob3J0Y3V0IC0gc3VjY2VzcyIKICAgICAgICApOwoKICAgICAgICAjIFJldHVybiBiYWNrIHRvIGRhc2hib2FyZCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnREYXNoYm9hcmQiKTsKCiAgICAgICAgIyBDaGFuZ2UgdGVzdCB1c2VyIGdyb3VwIHBlcm1pc3Npb24gZm9yIHdoaWNoIHF1ZXVlLXRpY2tldCBpcyBpbiB0byBSTy4KICAgICAgICAjICAgVG9vbGJhciBpY29uIHNob3VsZCBiZSByZW1vdmVkLCBzZWUgYnVnIzEyMjY5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICRTdWNjZXNzID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uR3JvdXBVc2VyQWRkKAogICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVSUQgICAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgbW92ZV9pbnRvID0+IDAsCiAgICAgICAgICAgICAgICBjcmVhdGUgICAgPT4gMCwKICAgICAgICAgICAgICAgIG93bmVyICAgICA9PiAwLAogICAgICAgICAgICAgICAgcHJpb3JpdHkgID0+IDAsCiAgICAgICAgICAgICAgICBydyAgICAgICAgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICdDaGFuZ2VkIHRlc3QgdXNlciBncm91cCBwZXJtaXNzaW9uIHRvIFJPJwogICAgICAgICk7CgogICAgICAgICMgUmVmcmVzaCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyBWZXJpZmllZCB0b29sIGJhciAnVGlja2V0IGluIG15IFNlcnZpY2VzJyBpY29uIGlzIHJlbW92ZWQuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnLlNlcnZpY2VWaWV3JykubGVuZ3RoID09PSAwOyIpLAogICAgICAgICAgICAiVG9vbEJhciBpY29uICdUaWNrZXQgaW4gbXkgU2VydmljZXMnIGlzIHJlbW92ZWQgd2hlbiBhZ2VudCBkb2Vzbid0IGhhdmUgUlcgYWNjZXNzIHRvIHRpY2tldCIKICAgICAgICApOwoKICAgICAgICAjIENoYW5nZSBzZXR0aW5ncyBUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFNlcnZpY2UjIyNWaWV3QWxsUG9zc2libGVUaWNrZXRzIHRvICdZZXMnLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFNlcnZpY2UjIyNWaWV3QWxsUG9zc2libGVUaWNrZXRzJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgUmVmcmVzaCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyBWZXJpZmllZCB0b29sIGJhciAnVGlja2V0IGluIG15IFNlcnZpY2VzJyBpY29uIGlzIHNob3duLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJy5TZXJ2aWNlVmlldycpLmxlbmd0aCA9PT0gMTsiKSwKICAgICAgICAgICAgIlRvb2xCYXIgaWNvbiAnVGlja2V0IGluIG15IFNlcnZpY2VzJyBpcyBzaG93biB3aGVuIGFnZW50IGRvZXNuJ3QgaGF2ZSBSVyBhY2Nlc3MgdG8gdGlja2V0IGFuZCBzZXR0aW5ncyAnVmlld0FsbFBvc3NpYmxlVGlja2V0cycgaXMgZW5hYmxlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCB0aWNrZXQuCiAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBUaWNrZXQgZGVsZXRpb24gY291bGQgZmFpbCBpZiBhcGFjaGUgc3RpbGwgd3JpdGVzIHRvIHRpY2tldCBoaXN0b3J5LiBUcnkgYWdhaW4gaW4gdGhpcyBjYXNlLgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICBzbGVlcCAzOwogICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgcGVyc29uYWwgc2VydmljZSBmcm9tIERCLgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gcGVyc29uYWxfc2VydmljZXMgV0hFUkUgdXNlcl9pZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRUZXN0VXNlcklEIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICdQZXJzb25hbCBzZXJ2aWNlIGNvbm5lY3Rpb24gaXMgZGVsZXRlZCcKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSB0ZXN0IHNlcnZpY2UuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCBxdWV1ZS4KICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFF1ZXVlSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlF1ZXVlIElEICRRdWV1ZUlEIGlzIGRlbGV0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCB1c2VyIGZyb20gZ3JvdXAuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBncm91cF91c2VyIFdIRVJFIGdyb3VwX2lkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEdyb3VwSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkdyb3VwICRHcm91cE5hbWUgLSBUZXN0VXNlciByZWxhdGlvbiBpcyBkZWxldGVkIgogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIHRlc3QgZ3JvdXAuCiAgICAgICAgJEdyb3VwTmFtZSA9ICREQk9iamVjdC0+UXVvdGUoJEdyb3VwTmFtZSk7CiAgICAgICAgJFN1Y2Nlc3MgICA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGdyb3VwcyBXSEVSRSBuYW1lID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEdyb3VwTmFtZSBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiR3JvdXAgJEdyb3VwTmFtZSBpcyBkZWxldGVkIgogICAgICAgICk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgIGZvciBteSAkQ2FjaGUgKAogICAgICAgICAgICBxdyAoVGlja2V0IFNlcnZpY2UgUXVldWUgR3JvdXApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IG90cnMgLSA1OTVjMWI3MmUzYWMwNDJkYmRjOWJmYmU2YWYzNmFhZDI3Mzc1YzFkIC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9QREZUaWNrZXQudAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKaWYgKCAkU2VsZW5pdW0tPnticm93c2VyX25hbWV9IG5lICdmaXJlZm94JyApIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDEsCiAgICAgICAgIlBERiB0ZXN0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIEZpcmVmb3giLAogICAgKTsKICAgIHJldHVybiAxOwp9CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgogICAgICAgICMgRG8gbm90IGNoZWNrIGVtYWlsIGFkZHJlc3Nlcy4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IFJlc3BvbnNpYmxlIGZlYXR1cmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6UmVzcG9uc2libGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAxCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IFR5cGUgZmVhdHVyZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIHRpY2tldCBzZXJ2aWNlIGZlYXR1cmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBRdWV1ZS4KICAgICAgICBteSAkUXVldWVOYW1lID0gJ1F1ZScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFF1ZXVlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTZWxlbml1bSBRdWV1ZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRRdWV1ZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBRdWV1ZUlEICRRdWV1ZUlEIgogICAgICAgICk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU2VydmljZVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyAkU2VydmljZVR5cGVMaXN0IH07CgojIGdldCB0aGUgbGlzdCBvZiBzbGEgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNMQVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyAkU0xBVHlwZUxpc3QgfTsKCiMgR2V0IHRoZSBjdXJyZW50IHNldHRpbmcgZm9yIGN1c3RvbWVyIHRpY2tldCBwcmludApteSAlQ3VzdG9tZXJUaWNrZXRQcmludFN5c0NvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+U2V0dGluZ0dldCgKICAgIE5hbWUgPT4gJ0N1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyVGlja2V0UHJpbnQnLAopOwoKIyBNYWtlIHN1cmUgQ3VzdG9tZXJUaWNrZXQgcHJpbnQgaXMgZW5hYmxlZC4KJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIFZhbGlkID0+IDEsCiAgICBLZXkgICA9PiAnQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjQ3VzdG9tZXJUaWNrZXRQcmludCcsCiAgICBWYWx1ZSA9PiAkQ3VzdG9tZXJUaWNrZXRQcmludFN5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0sCik7CgojIC0tLQoKICAgICAgICAjIENyZWF0ZSBTZXJ2aWNlLgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICdTZXJ2aScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnU2VsZW5pdW0gU2VydmljZScsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBTZXJ2aWNlSUQgJFNlcnZpY2VJRCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBTTEEuCiAgICAgICAgbXkgJFNMQU5hbWUgPSAnU0wnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTTEFJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFBZGQoCiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgID0+IFskU2VydmljZUlEXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCiMgLS0tCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDUwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgID0+IDIwMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgPT4gJ1NlbGVuaXVtIFNMQScsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiMgLS0tCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgICAgICJDcmVhdGVkIFNMQUlEICRRdWV1ZUlEIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIFR5cGUuCiAgICAgICAgbXkgJFR5cGVOYW1lID0gJ1R5cGUnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRUeXBlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFR5cGVOYW1lLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVHlwZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBUeXBlSUQgJFR5cGVJRCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBVc2Vycy4KICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICAgICAgbXkgQFVzZXJzOwogICAgICAgIGZvciBteSAkVXNlckNvdW50ICggMSAuLiAyICkgewoKICAgICAgICAgICAgIyBDcmVhdGUgdGVzdCBVc2VyIGFuZCBsb2dpbi4KICAgICAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgICAgIEdyb3VwcyA9PiBbJ3VzZXJzJ10sCiAgICAgICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAgICAgIyBHZXQgdXNlciBkYXRhLgogICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VyID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAVXNlcnMsIFwlVXNlckRhdGE7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSBDdXN0b21lciBDb21wYW55LgogICAgICAgIG15ICVDdXN0b21lckNvbXBhbnkgPSAoCiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55TmFtZSAgICA9PiAnQ29tcGFueScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVN0cmVldCAgPT4gJ1N0cmVldCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVpJUCAgICAgPT4gJ1pJUCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueUNpdHkgICAgPT4gJ0NpdHknIC4gJFJhbmRvbUlELAogICAgICAgICAgICBDdXN0b21lckNvbXBhbnlDb3VudHJ5ID0+ICdDb3VudHJ5JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55VVJMICAgICA9PiAnVVJMJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55Q29tbWVudCA9PiAnQ29tbWVudCcgLiAkUmFuZG9tSUQsCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJDb21wYW55SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55JyktPkN1c3RvbWVyQ29tcGFueUFkZCgKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICVDdXN0b21lckNvbXBhbnksCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEN1c3RvbWVyQ29tcGFueUlELAogICAgICAgICAgICAiQ3JlYXRlZCBDdXN0b21lckNvbXBhbnlJRCAkQ3VzdG9tZXJDb21wYW55SUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgQ3VzdG9tZXIgVXNlci4KICAgICAgICBteSAlQ3VzdG9tZXJVc2VyID0gKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lICA9PiAnQ3VzdG9tZXJGaXJzdE5hbWUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgICA9PiAnQ3VzdG9tZXJMYXN0TmFtZScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFVzZXJDdXN0b21lcklEID0+ICRDdXN0b21lckNvbXBhbnlJRCwKICAgICAgICAgICAgVXNlckxvZ2luICAgICAgPT4gJ0N1c3RvbWVyTG9naW4nIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyUGFzc3dvcmQgICA9PiAnQ3VzdG9tZXJQYXNzJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICAgPT4gJ0N1c3RvbWVyRW1haWwnIC4gJFJhbmRvbUlEIC4gJ0BleGFtcGxlLmNvbScsCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckFkZCgKICAgICAgICAgICAgU291cmNlICA9PiAnQ3VzdG9tZXJVc2VyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICVDdXN0b21lclVzZXIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICAiQ3JlYXRlZCBDdXN0b21lclVzZXJJRCAkQ3VzdG9tZXJVc2VySUQiCiAgICAgICAgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgS2V5ICAgID0+ICdVc2VyTGFuZ3VhZ2UnLAogICAgICAgICAgICBWYWx1ZSAgPT4gJ2VuJywKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBUaWNrZXRzLgogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICAgICAgbXkgQFRpY2tldHM7CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4gMyApIHsKICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgICAgICBteSAkVGlja2V0VGl0bGUgID0gJ1RpY2tldCcgLiAkQ291bnQgLiAkUmFuZG9tSUQ7CiAgICAgICAgICAgIG15ICVUaWNrZXQgICAgICAgPSAoCiAgICAgICAgICAgICAgICBUTiAgICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICRUaWNrZXRUaXRsZSwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJEN1c3RvbWVyQ29tcGFueUlELAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRVc2Vyc1swXS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRVc2Vyc1sxXS0+e1VzZXJJRH0sCgogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIkNyZWF0ZWQgVGlja2V0SUQgJFRpY2tldElEIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBUaWNrZXRzLCB7CiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgPT4gJFRpY2tldFRpdGxlLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBSZWNyZWF0ZSBUaWNrZXRPYmplY3QgdG8gbGV0IGV2ZW50IGhhbmRsZXJzIHJ1biBhbHNvIGZvciB0cmFuc2FjdGlvbiBtb2RlLgogICAgICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICAgICAgT2JqZWN0cyA9PiBbCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIENyZWF0ZSBBcnRpY2xlcy4KICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgICAgICBteSBAQXJ0aWNsZXMgICAgICA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ2hhbm5lbE5hbWUgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ0Zyb20gJyAuICRSYW5kb21JRCAuICcgQSA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgICAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICdUbyAnIC4gJFJhbmRvbUlEIC4gJyBBIDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0ZpcnN0IEFydGljbGUgU3ViamVjdCAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0ZpcnN0IEFydGljbGUgYm9keSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ0VtYWlsQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJ0N1c3RvbWVyIHNlbnQgYW4gZW1haWwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgICA9PiAnSW50ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDAsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnRnJvbSAnIC4gJFJhbmRvbUlEIC4gJyBCIDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJ1RvICcgLiAkUmFuZG9tSUQgLiAnIEIgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnU2Vjb25kIEFydGljbGUgU3ViamVjdCAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ1NlY29uZCBBcnRpY2xlIGJvZHkgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdBZGROb3RlJywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdBZ2VudCBjcmVhdGVkIG5vdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgICA9PiAnRW1haWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ3N5c3RlbScsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ09UUlMgU3lzdGVtIDxvdHJzQGxvY2FsaG9zdD4nLAogICAgICAgICAgICAgICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJ0NjICcgLiAkUmFuZG9tSUQgLiAnIEMgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnVGhpcmQgQXJ0aWNsZSBTdWJqZWN0ICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnVGhpcmQgQXJ0aWNsZSBib2R5ICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnU2VuZEF1dG9SZXBseScsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnU2VudCBhdXRvIHJlcGx5JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSBAQXJ0aWNsZUlEczsKICAgICAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewogICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoCiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSA9PiAkQXJ0aWNsZS0+e0NoYW5uZWxOYW1lfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkVGlja2V0c1swXS0+e0lEfSwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgIkNyZWF0ZWQgQXJ0aWNsZUlEICRBcnRpY2xlSUQiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQEFydGljbGVJRHMsICRBcnRpY2xlSUQ7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSBEeW5hbWljIEZpZWxkcy4KICAgICAgICBteSAkUmFuZG9tTnVtYmVyID0gc3Vic3RyICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpLCAtNzsKICAgICAgICBteSAlRHluYW1pY0ZpZWxkcyA9ICgKICAgICAgICAgICAgRHJvcGRvd24gPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnREZEcm9wZG93bicgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgTGFiZWwgICAgICA9PiAnREZEcm9wZG93bicgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiA5OTkwLAogICAgICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAwID0+ICdOb3RERlNlbGVjdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgMSA9PiAnWWVzREZTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBSZW9yZGVyID0+IDAsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE11bHRpc2VsZWN0ID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0RGTXVsdGlzZWxlY3QnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ0RGTXVsdGlzZWxlY3QnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MCwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ011bHRpc2VsZWN0JywKICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgeWVhciAgPT4gJ3llYXInLAogICAgICAgICAgICAgICAgICAgICAgICBtb250aCA9PiAnbW9udGgnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWVrICA9PiAnd2VlaycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBSZW9yZGVyID0+IDAsCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFRleHQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnREZUZXh0JyAuICRSYW5kb21OdW1iZXIsCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgID0+ICdERlRleHQnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5MCwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnQXJ0aWNsZScsCiAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFJlb3JkZXIgPT4gMCwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzID0gKAogICAgICAgICAgICBUZXh0ICAgICAgICA9PiAiREZUZXh0JFJhbmRvbUlEIiwKICAgICAgICAgICAgRHJvcGRvd24gICAgPT4gJzEnLAogICAgICAgICAgICBNdWx0aXNlbGVjdCA9PiBbCiAgICAgICAgICAgICAgICAnbW9udGgnLAogICAgICAgICAgICAgICAgJ3llYXInLAogICAgICAgICAgICBdLAogICAgICAgICk7CgogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICBteSBARHluYW1pY0ZpZWxkSURzOwogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkVHlwZSAoIHNvcnQga2V5cyAlRHluYW1pY0ZpZWxkcyApIHsKCiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICAgICAgICAgICAgICV7ICREeW5hbWljRmllbGRzeyREeW5hbWljRmllbGRUeXBlfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgICAgICAiQ3JlYXRlZCBEeW5hbWljRmllbGQgJER5bmFtaWNGaWVsZHN7JER5bmFtaWNGaWVsZFR5cGV9LT57TmFtZX0gLSBJRCAkRHluYW1pY0ZpZWxkSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRJRHMsICREeW5hbWljRmllbGRJRDsKCiAgICAgICAgICAgICMgU2V0IER5bmFtaWNGaWVsZCB2YWx1ZSB0byB0aWNrZXQgb3IgYXJ0aWNsZSBhY2NvcmRpbmdseS4KICAgICAgICAgICAgbXkgJE9iamVjdElEID0gJFRpY2tldHNbMF0tPntJRH07CiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZHN7JER5bmFtaWNGaWVsZFR5cGV9LT57T2JqZWN0VHlwZX0gZXEgJ0FydGljbGUnICkgewogICAgICAgICAgICAgICAgJE9iamVjdElEID0gJEFydGljbGVJRHNbMF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBkeW5hbWljIGZpZWxkLgogICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkc3skRHluYW1pY0ZpZWxkVHlwZX0tPntOYW1lfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZFZhbHVlc3skRHluYW1pY0ZpZWxkVHlwZX07CgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEVuYWJsZSBjcmVhdGVkIER5bmFtaWNGaWVsZHMgdG8gYmUgdmlzaWJsZSBpbiBBZ2VudFRpY2tldFByaW50LgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFByaW50IyMjRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHN7RHJvcGRvd259LT57TmFtZX0gICAgPT4gMSwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRze011bHRpc2VsZWN0fS0+e05hbWV9ID0+IDEsCiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkc3tUZXh0fS0+e05hbWV9ICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIGNyZWF0ZWQgRHluYW1pY0ZpZWxkcyB0byBiZSB2aXNpYmxlIGluIEN1c3RvbWVyVGlja2V0UHJpbnQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0UHJpbnQjIyNEeW5hbWljRmllbGQnLAogICAgICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkc3tEcm9wZG93bn0tPntOYW1lfSAgICA9PiAxLAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHN7TXVsdGlzZWxlY3R9LT57TmFtZX0gPT4gMSwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRze1RleHR9LT57TmFtZX0gICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgVGlja2V0IGF0dHJpYnV0ZXMgaW4gQ3VzdG9tZXJUaWNrZXRab29tIHNjcmVlbiA9PiBDdXN0b21lclRpY2tldFByaW50LgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIE93bmVyICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICA9PiAxLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IDEsCiAgICAgICAgICAgICAgICBTTEEgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VydmljZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgTGluayBmaXJzdCBhbmQgc2Vjb25kIHRpY2tldCBhcyBwYXJlbnQtY2hpbGQuCiAgICAgICAgbXkgJExpbmtPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpOwogICAgICAgIG15ICRTdWNjZXNzICAgID0gJExpbmtPYmplY3QtPkxpbmtBZGQoCiAgICAgICAgICAgIFNvdXJjZU9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgU291cmNlS2V5ICAgID0+ICRUaWNrZXRzWzBdLT57SUR9LAogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGlja2V0c1sxXS0+e0lEfSwKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlRpY2tlZElEICRUaWNrZXRzWzBdLT57SUR9IGFuZCAkVGlja2V0c1sxXS0+e0lEfSBsaW5rZWQgYXMgcGFyZW50LWNoaWxkIgogICAgICAgICk7CgogICAgICAgICMgTGluayBmaXJzdCBhbmQgdGhpcmQgdGlja2V0IGFzIGNoaWxkLXBhcmVudC4KICAgICAgICAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkKAogICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkVGlja2V0c1syXS0+e0lEfSwKICAgICAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICBUYXJnZXRLZXkgICAgPT4gJFRpY2tldHNbMF0tPntJRH0sCiAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZWRJRCAkVGlja2V0c1syXS0+e0lEfSBhbmQgJFRpY2tldHNbMV0tPntJRH0gbGlua2VkIGFzIHBhcmVudC1jaGlsZCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IFVzZXIgYW5kIGxvZ2luLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFRpY2tldFpvb20gc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfSIpOwoKICAgICAgICAjIENsaWNrIHRvIHByaW50IHRpY2tldCBpbiBBZ2VudCBpbnRlcmZhY2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRUaWNrZXRQcmludDtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfScgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBTd2l0Y2ggdG8gQWdlbnRUaWNrZXRQcmludCBwb3AgdXAgd2luZG93LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBTcGVjaWFsIGFwcHJvYWNoIGlzIHVzZWQgZm9yIHdhaXRpbmcgZm9yIFBERiBkb2N1bWVudCB0byBiZSBsb2FkZWQgZnVsbHkgYmVmb3JlIGNoZWNraW5nIGl0J3MgY29udGVudC4KICAgICAgICAjIFRoaXMgaXMgc3VwcG9ydGVkIGFuZCB0ZXN0ZWQgaW4gTW96aWxsYSBGaXJlZm94IGJyb3dzZXIuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZW5kT2ZDb250ZW50IikubGVuZ3RoID09PSAyJyApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHNjZW5hcmlvcy4KICAgICAgICBteSBAVGVzdHMgPSAoCgogICAgICAgICAgICAjIFRpY2tldCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICJUaWNrZXQjJFRpY2tldHNbMF0tPntOdW1iZXJ9IiwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAiVGlja2V0IyRUaWNrZXRzWzBdLT57TnVtYmVyfSB2YWx1ZSBpcyBjb3JyZWN0IiwKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXRzWzBdLT57VGl0bGV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUaWNrZXRUaXRsZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICJwcmludGVkIGJ5ICRUZXN0VXNlckxvZ2luICRUZXN0VXNlckxvZ2luICgkVGVzdFVzZXJMb2dpblxAbG9jYWx1bml0dGVzdC5jb20pLCIsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ByaW50ZWRCeSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAicHJpbnRlZCBieSAkQ3VzdG9tZXJVc2Vye1VzZXJGaXJzdG5hbWV9ICRDdXN0b21lclVzZXJ7VXNlckxhc3RuYW1lfSIsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ByaW50ZWRCeSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQ3VzdG9tZXInCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnU3RhdGUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdGF0ZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RhdGUgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQWdlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQWdlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJzAgbScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FnZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdBY2NvdW50ZWQgdGltZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FjY291bnRlZCB0aW1lIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnRmlyc3QgUmVzcG9uc2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGaXJzdCBSZXNwb25zZSBUaW1lIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnU29sdXRpb24gVGltZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FjY291bnRlZCB0aW1lIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQcmlvcml0eSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ByaW9yaXR5IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDcmVhdGVkIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUXVldWUgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdRdWV1ZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdMb2NrJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnTG9jayBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0xvY2sgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3VzdG9tZXJJRCBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJJRH0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVySUQgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnT3duZXInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVc2Vyc1swXS0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ093bmVyIGZpcnN0IHJvdyB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICcoJyAuICRVc2Vyc1swXS0+e1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciBzZWNvbmQgcm93IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVXNlcnNbMF0tPntVc2VyTGFzdG5hbWV9IC4gJyknLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciB0aGlyZCByb3cgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVzZXJzWzFdLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUmVzcG9uc2libGUgZmlyc3Qgcm93IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJygnIC4gJFVzZXJzWzFdLT57VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIHNlY29uZCByb3cgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVc2Vyc1sxXS0+e1VzZXJMYXN0bmFtZX0gLiAnKScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIHRoaXJkIHJvdyB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1R5cGUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUeXBlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFR5cGVOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUeXBlIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTZXJ2aWNlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTZXJ2aWNlIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1NMQScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1NMQSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTTEFOYW1lLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTTEEgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIFRpY2tldCBEeW5hbWljIEZpZWxkcy4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICREeW5hbWljRmllbGRze0Ryb3Bkb3dufS0+e0xhYmVsfSAuICc6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRHluYW1pY0ZpZWxkIERyb3Bkb3duIGxhYmVsIGlzIGNvcnJlY3QgZm9yIFRpY2tldCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnWWVzREZTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0R5bmFtaWNGaWVsZCBEcm9wZG93biB2YWx1ZSBpcyBjb3JyZWN0IGZvciBUaWNrZXQnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJER5bmFtaWNGaWVsZHN7TXVsdGlzZWxlY3R9LT57TGFiZWx9IC4gJzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgTXVsdGlzZWxlY3QgbGFiZWwgaXMgY29ycmVjdCBmb3IgVGlja2V0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdtb250aCwgeWVhcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0R5bmFtaWNGaWVsZCBNdWx0aXNlbGVjdCB2YWx1ZSBpcyBjb3JyZWN0IGZvciBUaWNrZXQnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBMaW5rZWQgT2JqZWN0cy4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdQYXJlbnQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUGFyZW50OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHNbMl0tPntOdW1iZXJ9IC4gJzogJyAuICRUaWNrZXRzWzJdLT57TmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1BhcmVudDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDaGlsZDonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDaGlsZDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXRzWzFdLT57TnVtYmVyfSAuICc6ICcgLiAkVGlja2V0c1sxXS0+e05hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDaGlsZDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQ3VzdG9tZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ3VzdG9tZXIgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDdXN0b21lciBJbmZvcm1hdGlvbiBoZWFkZXIgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnRmlyc3RuYW1lOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0ZpcnN0bmFtZTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJVc2Vye1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGaXJzdG5hbWU6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0xhc3RuYW1lOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0xhc3RuYW1lOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnTGFzdG5hbWU6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1VzZXJuYW1lOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1VzZXJuYW1lOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVXNlcm5hbWU6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0VtYWlsOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0VtYWlsOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckVtYWlsfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRW1haWw6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0N1c3RvbWVyOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVyOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55TmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVyOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdTdHJlZXQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RyZWV0OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55U3RyZWV0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RyZWV0OiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdaaXA6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnWmlwOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55WklQfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnWmlwOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDaXR5OicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NpdHk6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1c3RvbWVyQ29tcGFueXtDdXN0b21lckNvbXBhbnlDaXR5fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ2l0eTogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ291bnRyeTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDb3VudHJ5OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55Q291bnRyeX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NvdW50cnk6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1VSTDonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdVUkw6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1c3RvbWVyQ29tcGFueXtDdXN0b21lckNvbXBhbnlVUkx9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdVUkw6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0NvbW1lbnQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ29tbWVudDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVyQ29tcGFueUNvbW1lbnR9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDb21tZW50OiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQXJ0aWNsZSAjMyBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdGcm9tOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0Zyb206IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ09UUlMgU3lzdGVtJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRnJvbTogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdUbzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUbzogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ2M6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRnJvbTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ2MgJyAuICRSYW5kb21JRCAuICcgQycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NjOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzMnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1N1YmplY3Q6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3ViamVjdDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMl0tPntTdWJqZWN0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3ViamVjdDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDcmVhdGVkOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NyZWF0ZWQ6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ2J5IHN5c3RlbScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NyZWF0ZWQ6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMycsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMl0tPntCb2R5fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQm9keTogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQXJ0aWNsZSAjMiBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdGcm9tICcgLiAkUmFuZG9tSUQgLiAnIEInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzInLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnVG8gJyAuICRSYW5kb21JRCAuICcgQicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1RvOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzInLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMV0tPntTdWJqZWN0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3ViamVjdDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMyJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ2J5IGFnZW50JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMyJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEFydGljbGVzWzFdLT57Qm9keX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0JvZHk6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMicsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgQXJ0aWNsZSAjMSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdGcm9tICcgLiAkUmFuZG9tSUQgLiAnIEEnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1RvICcgLiAkUmFuZG9tSUQgLiAnIEEnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdUbzogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMxJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1swXS0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdWJqZWN0OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ2J5IGN1c3RvbWVyJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMxJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICREeW5hbWljRmllbGRze1RleHR9LT57TGFiZWx9IC4gJzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgVGV4dCBsYWJlbCBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3tUZXh0fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRHluYW1pY0ZpZWxkIFRleHQgdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMxJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1swXS0+e0JvZHl9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdCb2R5OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBQYWdpbmF0aW9uLgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1BhZ2UgMScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1BhZ2UgMSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdQYWdlIDInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQYWdlIDIgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSB2YWx1ZXMgaW4gQWdlbnRUaWNrZXRQcmludC4KICAgICAgICBteSAkQWdlbnRQYWdlU291cmNlID0gJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKTsKCiAgICAgICAgZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0ludGVyZmFjZX0gZXEgJ0FsbCcgfHwgJFRlc3QtPntJbnRlcmZhY2V9IGVxICdBZ2VudCcgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICBpbmRleCggJEFnZW50UGFnZVNvdXJjZSwgJFRlc3QtPntWYWx1ZX0gKSA+IC0xLAogICAgICAgICAgICAgICAgICAgICdBZ2VudCAtICcgLiAkVGVzdC0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDbG9zZSBBZ2VudFRpY2tldFByaW50IFBERiBwb3AgdXAgd2luZG93IGFuZCBzd2l0Y2ggd2luZG93LgogICAgICAgICRTZWxlbml1bS0+Y2xvc2UoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKCiAgICAgICAgIyBMb2dpbiBjdXN0b21lciB1c2VyLgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJEN1c3RvbWVyVXNlcntVc2VyUGFzc3dvcmR9LAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQ3VzdG9tZXJUaWNrZXRab29tIG9mIGNyZWF0ZWQgZmlyc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWN1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lclRpY2tldFpvb207VGlja2V0TnVtYmVyPSRUaWNrZXRzWzBdLT57TnVtYmVyfSIKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIHRvIHByaW50IHRpY2tldCBpbiBDdXN0b21lciBpbnRlcmZhY2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQ3VzdG9tZXJUaWNrZXRQcmludDtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfScgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIFNwZWNpYWwgYXBwcm9hY2ggaXMgdXNlZCBmb3Igd2FpdGluZyBmb3IgUERGIGRvY3VtZW50IHRvIGJlIGxvYWRlZCBmdWxseSBiZWZvcmUgY2hlY2tpbmcgaXQncyBjb250ZW50LgogICAgICAgICMgQ3VycmVudGx5IHRoaXMgaXMgc3VwcG9ydGVkIGluIE1vemlsbGEgRmlyZWZveCBicm93c2VyLgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImVuZE9mQ29udGVudCIpLmxlbmd0aCA9PT0gMScgKTsKCiAgICAgICAgIyBWZXJpZnkgdmFsdWVzIGluIEN1c3RvbWVyVGlja2V0UHJpbnQuCiAgICAgICAgbXkgJEN1c3RvbWVyUGFnZVNvdXJjZSA9ICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCk7CgogICAgICAgIGZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICAgICAgICAgIGlmICggJFRlc3QtPntJbnRlcmZhY2V9IGVxICdBbGwnIHx8ICRUZXN0LT57SW50ZXJmYWNlfSBlcSAnQ3VzdG9tZXInICkgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgaW5kZXgoICRDdXN0b21lclBhZ2VTb3VyY2UsICRUZXN0LT57VmFsdWV9ICkgPiAtMSwKICAgICAgICAgICAgICAgICAgICAnQ3VzdG9tZXIgLSAnIC4gJFRlc3QtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkVGVzdC0+e0ludGVyZmFjZX0gZXEgJ0FnZW50JyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIGluZGV4KCAkQ3VzdG9tZXJQYWdlU291cmNlLCAkVGVzdC0+e1ZhbHVlfSApID09IC0xLAogICAgICAgICAgICAgICAgICAgICdDdXN0b21lciAtICcgLiAkVGVzdC0+e01lc3NhZ2V9IC4gJyAtIG5vdCB2aXNpYmxlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRGVsZXRlIHRlc3QgVGlja2V0cy4KICAgICAgICBmb3IgbXkgJFRpY2tldCAoIHJldmVyc2UgQFRpY2tldHMgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldC0+e0lEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGlja2V0SUQgJFRpY2tldC0+e0lEfSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgRGVsZXRlIHRlc3QgRHluYW1pY0ZpZWxkcy4KICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZElEIChARHluYW1pY0ZpZWxkSURzKSB7CgogICAgICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICAgICAgICAgIElEICAgICA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGQgSUQgJER5bmFtaWNGaWVsZElEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBEZWxldGUgdGVzdCBkYXRhIGZyb20gdGhlIERCLgogICAgICAgIG15IEBEZWxldGVEYXRhID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBjdXN0b21lcl91c2VyIFdIRVJFIGxvZ2luID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlcklEICRDdXN0b21lclVzZXJJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gY3VzdG9tZXJfY29tcGFueSBXSEVSRSBjdXN0b21lcl9pZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkQ3VzdG9tZXJDb21wYW55SUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDdXN0b21lckNvbXBhbnlJRCAkQ3VzdG9tZXJDb21wYW55SUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHRpY2tldF90eXBlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUeXBlSUQgJFR5cGVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNlcnZpY2UtU0xBIHJlbGF0aW9uIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU0xBSUQgJFNMQUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAojIC0tLQojIElUU01Db3JlCiMgLS0tCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZSBwcmVmZXJlbmNlcyBmb3IgJFNlcnZpY2VJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKIyAtLS0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZUlEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgICAgICBmb3IgbXkgJEl0ZW0gKEBEZWxldGVEYXRhKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJEl0ZW0tPntTUUx9LAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkSXRlbS0+e0JpbmR9IF0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAkSXRlbS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhciBjYWNoZS4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgpOwogICAgfQopOwoKMTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoKCgovLyBUT0RPOgovL1JlbW92ZSB0aGlzIGxpbmUgYW5kIGZpeCBKU0RvYwovLyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6OkphdmFTY3JpcHQ6OkVTTGludCkKCgoKCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgQ29uZmlybURpYWxvZy4KICovCklUU00uQWdlbnQuQ29uZmlybURpYWxvZyA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAbmFtZSBTZXJpYWxpemVEYXRhCiAgICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHF1ZXJ5IHN0cmluZyBvZiB0aGUgZGF0YQogICAgICogQHBhcmFtIHtPYmplY3R9IERhdGEgLSBUaGUgZGF0YSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQ29udmVydHMgYSBnaXZlbiBoYXNoIGludG8gYSBxdWVyeSBzdHJpbmcuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFNlcmlhbGl6ZURhdGEoRGF0YSkgewogICAgICAgIHZhciBRdWVyeVN0cmluZyA9ICcnOwogICAgICAgICQuZWFjaChEYXRhLCBmdW5jdGlvbiAoS2V5LCBWYWx1ZSkgewogICAgICAgICAgICBRdWVyeVN0cmluZyArPSAnOycgKyBlbmNvZGVVUklDb21wb25lbnQoS2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChWYWx1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIFF1ZXJ5U3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogQHZhcmlhYmxlCiAgICAgKiBAcHJpdmF0ZQogICAgICogICAgIFRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCBmcm9tIHRoZSBEVEwgYW5kIGNvbnRhaW4gYWxsIHRoZSBkYXRhIHRoYXQgdGhlIGRpYWxvZyBuZWVkcy4KICAgICAqLwogICAgdmFyIERpYWxvZ0RhdGEgPSBbXTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHByaXZhdGUKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogQGRlc2NyaXB0aW9uIFNob3dzIHdhaXRpbmcgZGlhbG9nIHVudGlsIHNlYXJjaCBzY3JlZW4gaXMgcmVhZHkuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKXsKICAgICAgICB2YXIgRGl2SFRNTCA9IENvcmUuVGVtcGxhdGUuUmVuZGVyKCdBZ2VudC9JVFNNQ29yZS9Mb2FkaW5nRGlhbG9nJywgewogICAgICAgICAgICBTcGFuVGV4dDogQ29yZS5Db25maWcuR2V0KCdMb2FkaW5nTXNnJykKICAgICAgICB9KTsKICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZyhEaXZIVE1MLCAnJywgUG9zaXRpb25Ub3AsICdDZW50ZXInLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtFdmVudE9iamVjdH0gZXZlbnQgb2JqZWN0IG9mIHRoZSBjbGlja2VkIGVsZW1lbnQuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBzaG93cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAqLwogICAgVGFyZ2V0TlMuU2hvd0NvbmZpcm1EaWFsb2cgPSBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICAgICAgdmFyIExvY2FsRGlhbG9nRGF0YSwKICAgICAgICAgICAgUG9zaXRpb25Ub3AsCiAgICAgICAgICAgIERhdGEsCiAgICAgICAgICAgIEJ1dHRvbnM7CgogICAgICAgIC8vIGdldCBnbG9iYWwgc2F2ZWQgRGlhbG9nRGF0YSBmb3IgdGhpcyBmdW5jdGlvbgogICAgICAgIExvY2FsRGlhbG9nRGF0YSA9IERpYWxvZ0RhdGFbJChFdmVudC50YXJnZXQpLmF0dHIoJ2lkJyldOwoKICAgICAgICAvLyBkZWZpbmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cKICAgICAgICBQb3NpdGlvblRvcCA9ICQod2luZG93KS5zY3JvbGxUb3AoKSArICgkKHdpbmRvdykuaGVpZ2h0KCkgKiAwLjMpOwoKICAgICAgICAvLyBzaG93IHdhaXRpbmcgZGlhbG9nCiAgICAgICAgU2hvd1dhaXRpbmdEaWFsb2coUG9zaXRpb25Ub3ApOwoKICAgICAgICAvLyBhamF4IGNhbGwgdG8gdGhlIG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIHRlbXBsYXRlCiAgICAgICAgRGF0YSA9IExvY2FsRGlhbG9nRGF0YS5EaWFsb2dDb250ZW50UXVlcnlTdHJpbmc7CiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEsIGZ1bmN0aW9uIChSZXNwb25zZSkgewoKICAgICAgICAgICAgLy8gJ0NvbmZpcm1hdGlvbicgb3BlbnMgYSBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAgICAgICAgaWYgKFJlc3BvbnNlLkRpYWxvZ1R5cGUgPT09ICdDb25maXJtYXRpb24nKSB7CgogICAgICAgICAgICAgICAgLy8gZGVmaW5lIHllcyBhbmQgbm8gYnV0dG9ucwogICAgICAgICAgICAgICAgQnV0dG9ucyA9IFt7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5ZZXMsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKCiAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSAnWWVzJyBidXR0b24gaXMgcHJlc3NlZAogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBZZXMgYW5kIE5vIGJ1dHRvbnMgdG8gcHJldmVudCBtdWx0aXBsZSBzdWJtaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2Rpdi5EaWFsb2c6dmlzaWJsZSBkaXYuQ29udGVudEZvb3RlciBidXR0b24nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGRvZXMgdGhlIGNvbmZpcm1lZCBhY3Rpb24gYWZ0ZXIgcHJlc3NpbmcgdGhlIFllcyBidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArIExvY2FsRGlhbG9nRGF0YS5Db25maXJtZWRBY3Rpb25RdWVyeVN0cmluZyArIFNlcmlhbGl6ZURhdGEoQ29yZS5BcHAuR2V0U2Vzc2lvbkluZm9ybWF0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogTG9jYWxEaWFsb2dEYXRhLlRyYW5zbGF0ZWRUZXh0Lk5vLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICJDbG9zZSIKICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyAnTWVzc2FnZScgb3BlbnMgYSBkaWFsb2cgd2l0aCAxIGJ1dHRvbjogT2sKICAgICAgICAgICAgZWxzZSBpZiAoUmVzcG9uc2UuRGlhbG9nVHlwZSA9PT0gJ01lc3NhZ2UnKSB7CgogICAgICAgICAgICAgICAgLy8gZGVmaW5lIE9rIGJ1dHRvbgogICAgICAgICAgICAgICAgQnV0dG9ucyA9IFt7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5PaywKICAgICAgICAgICAgICAgICAgICBDbGFzczogIlByaW1hcnkiLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICJDbG9zZSIKICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBzaG93IHRoZSBjb25maXJtYXRpb24gZGlhbG9nIHRvIGNvbmZpcm0gdGhlIGFjdGlvbgogICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZyhSZXNwb25zZS5IVE1MLCBMb2NhbERpYWxvZ0RhdGEuRGlhbG9nVGl0bGUsIFBvc2l0aW9uVG9wLCAiQ2VudGVyIiwgdHJ1ZSwgQnV0dG9ucyk7CiAgICAgICAgICAgICQoJ2EuQXNQb3B1cERpYWxvZycpLnVuYmluZCgnY2xpY2suQXNQb3B1cERpYWxvZycpLmJpbmQoJ2NsaWNrLkFzUG9wdXBEaWFsb2cnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwICgkKHRoaXMpLmF0dHIoJ2hyZWYnKSwgJ0FjdGlvbicpOwogICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZzp2aXNpYmxlJykpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICB9LCAnanNvbicpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7RXZlbnRPYmplY3R9IGV2ZW50IG9iamVjdCBvZiB0aGUgY2xpY2tlZCBlbGVtZW50LgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gc2hvd3MgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpdGggMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgKi8KICAgIFRhcmdldE5TLkJpbmRDb25maXJtRGlhbG9nID0gZnVuY3Rpb24gKERhdGEpIHsKICAgICAgICBEaWFsb2dEYXRhW0RhdGEuRWxlbWVudElEXSA9IERhdGE7CgogICAgICAgIC8vIGJpbmRpbmcgYSBjbGljayBldmVudCB0byB0aGUgZGVmaW5lZCBlbGVtZW50CiAgICAgICAgJChEaWFsb2dEYXRhW0RhdGEuRWxlbWVudElEXS5FbGVtZW50U2VsZWN0b3IpLmJpbmQoJ2NsaWNrJywgSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLlNob3dDb25maXJtRGlhbG9nKTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ29uZmlybURpYWxvZyB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaAogKiBAbWVtYmVyb2YgSVRTTS5BZ2VudAogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIGN1c3RvbWVyIHNlYXJjaC4KICovCklUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2ggPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEVsZW1lbnQgLSBUaGUgalF1ZXJ5IG9iamVjdCBvZiB0aGUgaW5wdXQgZmllbGQgd2l0aCBhdXRvY29tcGxldGUuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgSW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgkRWxlbWVudCkgewoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJEVsZW1lbnQpKSB7CgogICAgICAgICAgICBDb3JlLlVJLkF1dG9jb21wbGV0ZS5Jbml0KCRFbGVtZW50LCBmdW5jdGlvbiAoUmVxdWVzdCwgUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgVVJMID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRDdXN0b21lclNlYXJjaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtOiBSZXF1ZXN0LnRlcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhSZXN1bHRzOiBDb3JlLlVJLkF1dG9jb21wbGV0ZS5HZXRDb25maWcoJ01heFJlc3VsdHNEaXNwbGF5ZWQnKQogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC5kYXRhKCdBdXRvQ29tcGxldGVYSFInLCBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKFVSTCwgRGF0YSwgZnVuY3Rpb24gKFJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgVmFsdWVEYXRhID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICRFbGVtZW50LnJlbW92ZURhdGEoJ0F1dG9Db21wbGV0ZVhIUicpOwogICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goUmVzdWx0LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZURhdGEucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuTGFiZWwgKyAiICgiICsgdGhpcy5WYWx1ZSArICIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5WYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93IDogdGhpcy5MYWJlbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZShWYWx1ZURhdGEpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoRXZlbnQsIFVJKSB7CiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQudmFsKFVJLml0ZW0uc2hvdyk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBoaWRkZW4gZmllbGQgU2VsZWN0ZWRDdXN0b21lclVzZXIKICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgICAgICAgICAgICAgICAgICAkKCcjJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCRFbGVtZW50LmF0dHIoJ2lkJykpICsgJ1NlbGVjdGVkJykudmFsKFVJLml0ZW0udmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ0N1c3RvbWVyU2VhcmNoJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gYmVmb3JlIHVubG9hZCByZW1vdmUgb2xkIHNlbGVjdGVkIGRhdGEuIElmIHRoZSBwYWdlIGlzIHJlbG9hZGVkICh3aXRoIEY1KSB0aGlzIGRhdGEgc3RheXMgaW4gdGhlIGZpZWxkIGFuZCBpbnZva2VzIGFuIGFqYXggcmVxdWVzdCBvdGhlcndpc2UKICAgICAgICAkKHdpbmRvdykub24oJ2JlZm9yZXVubG9hZC5DdXN0b21lclNlYXJjaCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoJEVsZW1lbnQuYXR0cignaWQnKSkgKyAnU2VsZWN0ZWQnKS52YWwoJycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgYmVoYXZpb3VycyBmb3IgSVRTTSBTZXJ2aWNlLgogKi8KIElUU00uQWdlbnQuU2VydmljZSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBBZ2VudC5TZXJ2aWNlCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFjdGlvbnMgZm9yIElUU00gU2VydmljZS4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LlNlcnZpY2UgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgYmVoYXZpb3VycyBmb3IgSVRTTSBTZXJ2aWNlIFpvb20uCiAqLwogSVRTTS5BZ2VudC5TZXJ2aWNlWm9vbSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBBZ2VudC5TZXJ2aWNlCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFjdGlvbnMgZm9yIElUU00gU2VydmljZSBab29tLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24oKSB7CgogICAgICAgICQoJ3VsLkFjdGlvbnMgYS5Bc1BvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgJCgndWwuQWN0aW9ucyBhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEluaXRpYWxpemUgYWxsb2NhdGlvbiBsaXN0IGZvciBsaW5rIG9iamVjdCB0YWJsZS4KICAgICAgICBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5TZXRBbGxvY2F0aW9uTGlzdCgpOwogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuU2VydmljZVpvb20gfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgYmVoYXZpb3VycyBmb3IgSVRTTSBTTEEuCiAqLwogSVRTTS5BZ2VudC5TTEEgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQWdlbnQuU0xBCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFjdGlvbnMgZm9yIElUU00gU0xBLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24oKSB7CgogICAgICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgICAgIC8vIG9ubHkgYWN0IGlmIHRoZSBsaW5rIHdhcyBub3QgY2xpY2tlZCBkaXJlY3RseQogICAgICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuU0xBIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgYmVoYXZpb3VycyBmb3IgSVRTTSBTTEEgWm9vbS4KICovCiBJVFNNLkFnZW50LlNMQVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQWdlbnQuU0xBCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFjdGlvbnMgZm9yIElUU00gU0xBIFpvb20uCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LlNMQVpvb20gfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5ab29tCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIENvcmUuSVRTTS5UaWNrZXRab29tCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIElUU00uCiAqLwpJVFNNLkFnZW50Llpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBJVFNNVGFibGVIZWlnaHQgLSBUaGUgaGVpZ3RoIG9mIHRoZSB0YWJsZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoSVRTTVRhYmxlSGVpZ2h0KSB7CgogICAgICAgIENvcmUuVUkuUmVzaXphYmxlLkluaXQoJCgnI0lUU01UYWJsZUJvZHknKSwgSVRTTVRhYmxlSGVpZ2h0LCBmdW5jdGlvbiAoZXZlbnQsIHVpLCBIZWlnaHQpIHsKCiAgICAgICAgICAgIC8vIHJlbWVtYmVyIG5ldyBoZWlnaHQgZm9yIG5leHQgcmVsb2FkCiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoVGFyZ2V0TlMuUmVzaXplVGltZU91dFNjcm9sbGVyKTsKICAgICAgICAgICAgVGFyZ2V0TlMuUmVzaXplVGltZU91dFNjcm9sbGVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgQ29yZS5BZ2VudC5QcmVmZXJlbmNlc1VwZGF0ZSgnVXNlckNvbmZpZ0l0ZW1ab29tVGFibGVIZWlnaHQnLCBIZWlnaHQpOwogICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuWm9vbSB8fCB7fSkpOwo=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIEZsYWcKICovCgpmaWVsZHNldC5UYWJsZUxpa2UgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCiNTZXJ2aWNlSW5jaWRlbnRTdGF0ZUNvbnRhaW5lciAuRmxhZywKLlNpZGViYXJDb2x1bW4gZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBtYXJnaW4tdG9wOiA3cHg7Cn0KCnVsLklUU01GbGFnIHsKICAgIG1hcmdpbi10b3A6IDVweDsKfQoKdWwuSVRTTUZsYWcgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCi5SVEwgZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogNXB4Owp9CgouRmxhZyBzcGFuLmdyYXlsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojY2RjZGNkOwp9CgouRmxhZyBzcGFuLmdyZWVubGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM4YmVmNGQ7Cn0KCi5GbGFnIHNwYW4ueWVsbG93bGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmRkNTA7Cn0KCi5GbGFnIHNwYW4ucmVkbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmNTA1ZTsKfQoKLkZsYWcgc3Bhbi5wdXJwbGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojYjIzYWVlOwp9CgouRmxhZyBzcGFuLm9yYW5nZWxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZjhjMDA7Cn0KCi5GbGFnIHNwYW4uY3lhbmxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiM3OWNkY2Q7Cn0KCi5GbGFnIHNwYW4ud2hpdGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOwp9CgouRmxhZyBzcGFuLmJsYWNrbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsKfQoKLyoqCiAqIEBub3RlICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGZvciBhIExhYmVsIGFuZCBhIERpdiB3aXRoIGNsYXNzICdGaWVsZCcsCiAqICAgICAgICAgICB0aGF0IGFyZSBpbnNpZGUgYSBGaWVsZCBEaXYgLgogKi8KCmxhYmVsLlN1YkVsZW1lbnQgewogICAgd2lkdGg6IDQwJSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4Owp9CgpkaXYuU3ViRWxlbWVudCB7CiAgICBtYXJnaW4tbGVmdDogNDAlICFpbXBvcnRhbnQ7Cn0KCmRpdi5TdWJFbGVtZW50IGlucHV0Llc1MHBjIHsKICAgIHdpZHRoOiAzMyU7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBOb0RvdWJsZUJvcmRlcnMKICovCgouQ29udGVudC5Ob0RvdWJsZUJvcmRlcnMgewogICAgYm9yZGVyLWxlZnQ6IDAgbm9uZSAjMDAwMDAwOwogICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgIzAwMDAwMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBTdGFuZGFyZCBXaWR0aHMKICovCi5XNXBjIHsKICAgIHdpZHRoOiA1JTsKfQoKLlcxNXBjIHsKICAgIHdpZHRoOiAxNSU7Cn0KCi5XMzBwYyB7CiAgICB3aWR0aDogMzAlOwp9Cgp9LyogZW5kIG1lZGlhICovCgoK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSVRTTURldGFpbHMKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBIZWFkbGluZQogKi8KCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0cmVlCiAqLwojSVRTTVRyZWUgewogICAgbWFyZ2luLXRvcDogMjBweDsKfQoKCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0YWJsZSBib2R5CiAqLwojSVRTTVRhYmxlQm9keSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKI0lUU01UYWJsZUJvZHkgLlNjcm9sbGVyIHsKICAgIGhlaWdodDogMTQwcHg7CiAgICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgQ29udHJvbFJvdyBJY29ucwogKi8KCgouSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiByaWdodDsKfQoKLlJUTCAuSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiBsZWZ0Owp9CgoKLkNvbnRyb2xSb3cgLklUU01JdGVtVmlldy5JY29ucyAuT25lSVRTTUl0ZW0uQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLk9uZUlUU01JdGVtLkFjdGl2ZTpob3ZlciBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7Cn0KCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcyBzcGFuLAouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXM6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4Owp9CgouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXMuQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcy5BY3RpdmU6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsKfQoKLkNvbnRyb2xSb3cgLklUU01GaWx0ZXIuSWNvbnMgLkFjdGl2ZSBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgSXRlbVJvdwogKiBAbm90ZSAgICAgICAgY29udGFpbnMgcmFuZG9tIGl0ZW1zIGFuZCBpcyBwb3NpdGlvbmVkIGluIHRoZSBzaWRlYmFyCiAqLwoKLkl0ZW1Sb3cgewogICAgbWFyZ2luLWxlZnQ6IDQwJTsKfQoKLlJUTCAuSXRlbVJvdyB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogNDAlOwp9CgouSXRlbVJvdyBsaSB7CiAgICBwYWRkaW5nOiAzcHggMCA1cHggOHB4Owp9CgouUlRMIC5JdGVtUm93IGxpIHsKICAgIHBhZGRpbmc6IDNweCA4cHggNXB4IDA7Cn0KCi5JdGVtUm93IGEgewogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBjb2xvcjogIzAwMDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouSXRlbVJvdyBhOmhvdmVyIHsKICAgIGNvbG9yOiAjNjY2Owp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgU2VhcmNoCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCgovKioKICogQHN1YnNlY3Rpb24gIEF1dG9Db21wbGV0ZQogKi8KCi51aS1hdXRvY29tcGxldGUgewogICAgei1pbmRleDogMTAwMDAwICFpbXBvcnRhbnQ7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ1NTIGZvciBwcmludGluZwogKi8KCkBtZWRpYSBwcmludCB7CgoKI0lUU01UYWJsZSB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGFibGVzCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgT3ZlcnZpZXcgU21hbGwgVmlldyBUYWJsZQogKi8KCi5UYWJsZVNtYWxsIHRoZWFkLklUU01IZWFkZXIgc3BhbiB7CiAgICBjb2xvcjogIzRBNEE0QTsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICB0YWJsZSBlbGVtZW50cyB3aXRob3V0IGhpZ2hsaWdodAogKi8KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCB7CiAgICBoZWlnaHQ6IDMwcHg7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCBpbnB1dCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRib2R5IHRyIHRkIHNlbGVjdHsKICAgIHdpZHRoOiA4NSU7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQouRGF0YVRhYmxlTm9IaWdobGlnaHQgdHIuRXZlbjpob3ZlciB0ZCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRyLkV2ZW46aG92ZXIuTGFzdCB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1Owp9CgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHIuTGFzdDpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKfQ==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OklUU01Db3JlOyAgICAjIyBubyBjcml0aWMKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCklUU01Db3JlLnBtIC0gY29kZSB0byBleGVjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1jdXQKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENvZGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCd2YXI6OnBhY2thZ2VzZXR1cDo6SVRTTUNvcmUnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBGb3JjZSBhIHJlbG9hZCBvZiBaWlpBdXRvLnBtIGFuZCBaWlpBQXV0by5wbSB0byBnZXQgdGhlIGZyZXNoIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJUlOQyApIHsKICAgICAgICBpZiAoICRNb2R1bGUgPX4gbS9aWlpBQT91dG9cLnBtJC8gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkSU5DeyRNb2R1bGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIENyZWF0ZSBjb21tb24gb2JqZWN0cyB3aXRoIGZyZXNoIGRlZmF1bHQgY29uZmlnLgogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKCk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY3JlYXRlIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ29yZQogICAgJFNlbGYtPl9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnR3JvdXAgZm9yIElUU00gU2VydmljZSBtYXNrIGFjY2VzcyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLicsCiAgICApOwoKICAgICMgZmlsbCB1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgY3JpdGljYWxpdHkgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7CgogICAgIyBmaWxsIHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzbGEgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTTEFUeXBlSUQoKTsKCiAgICAjIHNldCBwcmVmZXJlbmNlcyBmb3Igc29tZSBHZW5lcmFsQ2F0YWxvZyBlbnRyaWVzCiAgICAjIHRoaXMgaXMgb25seSBuZWNlc3NhcnkgaW4gQ29kZUluc3RhbGwKICAgICMgKEZvciBVcGdyYWRlcyB0aGlzIGlzIGRvbmUgYWxyZWFkeSBpbiB0aGUgR2VuZXJhbENhdGFsb2cgcGFja2FnZSkKICAgICRTZWxmLT5fU2V0UHJlZmVyZW5jZXMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVSZWluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHJlaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlUmVpbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVJlaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnR3JvdXAgZm9yIElUU00gU2VydmljZSBtYXNrIGFjY2VzcyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLicsCiAgICApOwoKICAgICMgZmlsbCB1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgY3JpdGljYWxpdHkgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7CgogICAgIyBmaWxsIHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzbGEgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTTEFUeXBlSUQoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzJfOTEoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDMuMi45MSAoMy4zLjAgQmV0YSAxKS4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzNfMl85MSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzJfOTEgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlIHRoZSB2YWx1ZXMgZm9yIENyaXRpY2FsaXR5IGFuZCB0aGUgSW1wYWN0IGZyb20gR2VuZXJhbENhdGFsb2cgdG8gRHluYW1pY0ZpZWxkcwogICAgJFNlbGYtPl9NaWdyYXRlQ3JpdGljYWxpdHlBbmRJbXBhY3RUb0R5bmFtaWNGaWVsZHMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfMigpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gNC4wLjIuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfMigpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfMiB7ICAgICMjIG5vIGNyaXRpYwogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG1pZ3JhdGUgdGhlIERUTCBDb250ZW50IGluIHRoZSBTeXNDb25maWcKICAgICRTZWxmLT5fTWlncmF0ZURUTEluU3lzQ29uZmlnKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgogICAgJFNlbGYtPl9NaWdyYXRlQ29uZmlncygpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVwZ3JhZGUoKQoKcnVuIHRoZSBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBmaWxsIHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpOwoKICAgICMgZmlsbCB1cCBlbXB0eSBjcml0aWNhbGl0eSByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNsYSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKICAgICMgbWFrZSBkeW5hbWljIGZpZWxkcyBpbnRlcm5hbAogICAgJFNlbGYtPl9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCkKCnJldHVybnMgdGhlIGRlZmluaXRpb24gZm9yIElUU01Db3JlIHJlbGF0ZWQgZHluYW1pYyBmaWVsZHMKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24oKTsKCj1jdXQKCnN1YiBfR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWZpbmUgYWxsIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ29yZQogICAgbXkgQER5bmFtaWNGaWVsZHMgPSAoCiAgICAgICAgewogICAgICAgICAgICBPbGROYW1lICAgID0+ICdUaWNrZXRGcmVlVGV4dDEzJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnSVRTTUNyaXRpY2FsaXR5JywKICAgICAgICAgICAgTGFiZWwgICAgICA9PiAnQ3JpdGljYWxpdHknLAogICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlVmFsdWVzID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJzEgdmVyeSBsb3cnICA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzIgbG93JyAgICAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgICAgICczIG5vcm1hbCcgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgICAgICAgICAnNCBoaWdoJyAgICAgID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgICAgICc1IHZlcnkgaGlnaCcgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE9sZE5hbWUgICAgPT4gJ1RpY2tldEZyZWVUZXh0MTQnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdJVFNNSW1wYWN0JywKICAgICAgICAgICAgTGFiZWwgICAgICA9PiAnSW1wYWN0JywKICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlVmFsdWVzID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJzEgdmVyeSBsb3cnICA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzIgbG93JyAgICAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgICAgICczIG5vcm1hbCcgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgICAgICAgICAnNCBoaWdoJyAgICAgID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgICAgICc1IHZlcnkgaGlnaCcgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIEBEeW5hbWljRmllbGRzOwp9Cgo9aGVhZDIgX0NyZWF0ZUlUU01EeW5hbWljRmllbGRzKCkKCmNyZWF0ZXMgYWxsIGR5bmFtaWMgZmllbGRzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgSVRTTUNvcmUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpOwoKPWN1dAoKc3ViIF9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWxpZElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTG9va3VwKAogICAgICAgIFZhbGlkID0+ICd2YWxpZCcsCiAgICApOwoKICAgICMgZ2V0IGFsbCBjdXJyZW50IGR5bmFtaWMgZmllbGRzCiAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBvcmRlciBudW1iZXJzIChpcyBhbHJlYWR5IHNvcnRlZCkuCiAgICBteSBARHluYW1pY2ZpZWxkT3JkZXJMaXN0OwogICAgZm9yIG15ICREeW5hbWljZmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBwdXNoIEBEeW5hbWljZmllbGRPcmRlckxpc3QsICREeW5hbWljZmllbGQtPntGaWVsZE9yZGVyfTsKICAgIH0KCiAgICAjIGdldCB0aGUgbGFzdCBlbGVtZW50IGZyb20gdGhlIG9yZGVyIGxpc3QgYW5kIGFkZCAxCiAgICBteSAkTmV4dE9yZGVyTnVtYmVyID0gMTsKICAgIGlmIChARHluYW1pY2ZpZWxkT3JkZXJMaXN0KSB7CiAgICAgICAgJE5leHRPcmRlck51bWJlciA9ICREeW5hbWljZmllbGRPcmRlckxpc3RbLTFdICsgMTsKICAgIH0KCiAgICAjIGdldCB0aGUgZGVmaW5pdGlvbiBmb3IgYWxsIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICRTZWxmLT5fR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCk7CgogICAgIyBjcmVhdGUgYSBkeW5hbWljIGZpZWxkcyBsb29rdXAgdGFibGUKICAgIG15ICVEeW5hbWljRmllbGRMb29rdXA7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmIHJlZiAkRHluYW1pY0ZpZWxkIG5lICdIQVNIJzsKICAgICAgICAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGQ7CiAgICB9CgogICAgIyBjcmVhdGUgb3IgdXBkYXRlIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgbXkgJENyZWF0ZUR5bmFtaWNGaWVsZDsKCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZHluYW1pYyBmaWVsZCBhbHJlYWR5IGV4aXN0cwogICAgICAgIGlmICggcmVmICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJENyZWF0ZUR5bmFtaWNGaWVsZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoZSBmaWVsZCBleGlzdHMgY2hlY2sgaWYgdGhlIHR5cGUgbWF0Y2ggd2l0aCB0aGUgbmVlZGVkIHR5cGUKICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57RmllbGRUeXBlfQogICAgICAgICAgICBuZSAkRHluYW1pY0ZpZWxkLT57RmllbGRUeXBlfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyByZW5hbWUgdGhlIGZpZWxkIGFuZCBjcmVhdGUgYSBuZXcgb25lCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAleyAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSB9LAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57TmFtZX0gLiAnT2xkJywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENyZWF0ZUR5bmFtaWNGaWVsZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBpZiB0aGUgZmllbGQgZXhpc3RzIGFuZCB0aGUgdHlwZSBtYXRjaCwgdXBkYXRlIGl0IHRvIHRoZSBJVFNNIGRlZmluaXRpb24KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZFVwZGF0ZSgKICAgICAgICAgICAgICAgICV7JER5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICAgICBJRCAgICAgICAgID0+ICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57SUR9LAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0ZpZWxkT3JkZXJ9LAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAkVmFsaWRJRCwKICAgICAgICAgICAgICAgIFJlb3JkZXIgICAgPT4gMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgbmV3IGZpZWxkIGhhcyB0byBiZSBjcmVhdGVkCiAgICAgICAgaWYgKCRDcmVhdGVEeW5hbWljRmllbGQpIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGEgbmV3IGZpZWxkCiAgICAgICAgICAgIG15ICRGaWVsZElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgICAgICAgICBJbnRlcm5hbEZpZWxkID0+IDEsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICREeW5hbWljRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgICAgPT4gJE5leHRPcmRlck51bWJlciwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0sCiAgICAgICAgICAgICAgICBPYmplY3RUeXBlICAgID0+ICREeW5hbWljRmllbGQtPntPYmplY3RUeXBlfSwKICAgICAgICAgICAgICAgIENvbmZpZyAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0NvbmZpZ30sCiAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRWYWxpZElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJEZpZWxkSUQ7CgogICAgICAgICAgICAjIGluY3JlYXNlIHRoZSBvcmRlciBudW1iZXIKICAgICAgICAgICAgJE5leHRPcmRlck51bWJlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwKICAgICRTZWxmLT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX01pZ3JhdGVDcml0aWNhbGl0eUFuZEltcGFjdFRvRHluYW1pY0ZpZWxkcygpCgpUaGlzIGZ1bmN0aW9uIG1pZ3JhdGVzIHRoZSB2YWx1ZXMgZm9yIEM8Q3JpdGljYWxpdHk+IGFuZCB0aGUgSW1wYWN0IGZyb20gR2VuZXJhbENhdGFsb2cgdG8gRHluYW1pY0ZpZWxkcy4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+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+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ0VuZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICk7CgogICAgZm9yIG15ICRTUUwgKEBEcm9wKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX1NldFByZWZlcmVuY2VzKCkKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9TZXRQcmVmZXJlbmNlcygpCgo9Y3V0CgpzdWIgX1NldFByZWZlcmVuY2VzIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJU1hcCA9ICgKICAgICAgICBPcGVyYXRpb25hbCA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgIFdhcm5pbmcgICAgID0+ICd3YXJuaW5nJywKICAgICAgICBJbmNpZGVudCAgICA9PiAnaW5jaWRlbnQnLAogICAgKTsKCiAgICBOQU1FOgogICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVNYXAgKSB7CgogICAgICAgIG15ICRJdGVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIE5hbWUgID0+ICROYW1lLAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBOQU1FIGlmICEkSXRlbTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbS0+e0l0ZW1JRH0sCiAgICAgICAgICAgIEtleSAgICA9PiAnRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIFZhbHVlICA9PiAkTWFweyROYW1lfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfQ0lQRGVmYXVsdE1hdHJpeFNldCgpCgpzZXQgdGhlIGRlZmF1bHQgQzxDSVA+IG1hdHJpeAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0NJUERlZmF1bHRNYXRyaXhTZXQoKTsKCj1jdXQKCnN1YiBfQ0lQRGVmYXVsdE1hdHJpeFNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGN1cnJlbnQgYWxsb2NhdGlvbiBsaXN0CiAgICBteSAkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKS0+QWxsb2NhdGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRMaXN0OwogICAgcmV0dXJuIGlmIHJlZiAkTGlzdCBuZSAnSEFTSCc7CgogICAgIyBzZXQgbm8gbWF0cml4IGlmIGFscmVhZHkgZGVmaW5lZAogICAgcmV0dXJuIGlmICV7JExpc3R9OwoKICAgICMgZGVmaW5lIHRoZSBhbGxvY2F0aW9ucwogICAgbXkgJUFsbG9jYXRpb247CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzEgdmVyeSBsb3cnfSAgID0gJzEgdmVyeSBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eycyIGxvdyd9ICAgICAgICA9ICcxIHZlcnkgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnMyBub3JtYWwnfSAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eyc0IGhpZ2gnfSAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzUgdmVyeSBoaWdoJ30gID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzEgdmVyeSBsb3cnfSAgICAgICAgPSAnMSB2ZXJ5IGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eycyIGxvdyd9ICAgICAgICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzMgbm9ybWFsJ30gICAgICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnNCBoaWdoJ30gICAgICAgICAgICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eyc1IHZlcnkgaGlnaCd9ICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eycxIHZlcnkgbG93J30gICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzIgbG93J30gICAgICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnMyBub3JtYWwnfSAgICAgICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eyc0IGhpZ2gnfSAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eyc1IHZlcnkgaGlnaCd9ICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnMSB2ZXJ5IGxvdyd9ICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eycyIGxvdyd9ICAgICAgICAgICAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzMgbm9ybWFsJ30gICAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzQgaGlnaCd9ICAgICAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzUgdmVyeSBoaWdoJ30gICAgICA9ICc1IHZlcnkgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eycxIHZlcnkgbG93J30gID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzIgbG93J30gICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzMgbm9ybWFsJ30gICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzQgaGlnaCd9ICAgICAgPSAnNSB2ZXJ5IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnNSB2ZXJ5IGhpZ2gnfSA9ICc1IHZlcnkgaGlnaCc7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICAgICAgSVRTTUltcGFjdCAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRDb25maWdBcnJheVJlZn0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIGdldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgbXkgJUNyaXRpY2FsaXR5TGlzdCA9ICV7ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9IH07CgogICAgIyBnZXQgdGhlIGltcGFjdCBsaXN0CiAgICBteSAlSW1wYWN0TGlzdCA9ICV7ICRQb3NzaWJsZVZhbHVlc3tJVFNNSW1wYWN0fSB9OwoKICAgICMgZ2V0IHByaW9yaXR5IGxpc3QKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVQcmlvcml0eUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAlUHJpb3JpdHlMaXN0OwoKICAgICMgY3JlYXRlIHRoZSBhbGxvY2F0aW9uIG1hdHJpeAogICAgbXkgJUFsbG9jYXRpb25NYXRyaXg7CiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAlQWxsb2NhdGlvbiApIHsKCiAgICAgICAgbmV4dCBJTVBBQ1QgaWYgISRJbXBhY3RMaXN0eyRJbXBhY3R9OwoKICAgICAgICBDUklUSUNBTElUWToKICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICggc29ydCBrZXlzICV7ICRBbGxvY2F0aW9ueyRJbXBhY3R9IH0gKSB7CgogICAgICAgICAgICBuZXh0IENSSVRJQ0FMSVRZIGlmICEkQ3JpdGljYWxpdHlMaXN0eyRDcml0aWNhbGl0eX07CgogICAgICAgICAgICAjIGV4dHJhY3QgcHJpb3JpdHkKICAgICAgICAgICAgbXkgJFByaW9yaXR5ID0gJEFsbG9jYXRpb257JEltcGFjdH0tPnskQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJFByaW9yaXR5TGlzdFJldmVyc2V7JFByaW9yaXR5fTsKCiAgICAgICAgICAgICMgZXh0cmFjdCBwcmlvcml0eSBpZAogICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRQcmlvcml0eUxpc3RSZXZlcnNleyRQcmlvcml0eX07CgogICAgICAgICAgICAkQWxsb2NhdGlvbk1hdHJpeHskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX0gPSAkUHJpb3JpdHlJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBzYXZlIHRoZSBtYXRyaXgKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKS0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgQWxsb2NhdGVEYXRhID0+IFwlQWxsb2NhdGlvbk1hdHJpeCwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfR3JvdXBBZGQoKQoKYWRkIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdUaGUgZ3JvdXAgZGVzY3JpcHRpb24uJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgRGVzY3JpcHRpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGxpc3Qgb2YgYWxsIGdyb3VwcwogICAgbXkgJUdyb3VwTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExpc3QoKTsKCiAgICAjIHJldmVyc2UgdGhlIGdyb3VwIGxpc3QgZm9yIGVhc2llciBsb29rdXAKICAgIG15ICVHcm91cExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlR3JvdXBMaXN0OwoKICAgICMgY2hlY2sgaWYgZ3JvdXAgYWxyZWFkeSBleGlzdHMKICAgIG15ICRHcm91cElEID0gJEdyb3VwTGlzdFJldmVyc2V7ICRQYXJhbXtOYW1lfSB9OwoKICAgICMgcmVhY3RpdmF0ZSB0aGUgZ3JvdXAKICAgIGlmICgkR3JvdXBJRCkgewoKICAgICAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgICAgICBteSAlR3JvdXBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwR2V0KAogICAgICAgICAgICBJRCAgICAgPT4gJEdyb3VwSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgcmVhY3RpdmF0ZSBncm91cAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cFVwZGF0ZSgKICAgICAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGFkZCB0aGUgZ3JvdXAKICAgIGVsc2UgewogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17RGVzY3JpcHRpb259LAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBsb29rdXAgdGhlIG5ldyBncm91cCBpZAogICAgbXkgJE5ld0dyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBhZGQgdXNlciByb290IHRvIHRoZSBncm91cAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyQWRkKAogICAgICAgIEdJRCAgICAgICAgPT4gJE5ld0dyb3VwSUQsCiAgICAgICAgVUlEICAgICAgICA9PiAxLAogICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICBybyAgICAgICAgPT4gMSwKICAgICAgICAgICAgbW92ZV9pbnRvID0+IDEsCiAgICAgICAgICAgIGNyZWF0ZSAgICA9PiAxLAogICAgICAgICAgICBvd25lciAgICAgPT4gMSwKICAgICAgICAgICAgcHJpb3JpdHkgID0+IDEsCiAgICAgICAgICAgIHJ3ICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0dyb3VwRGVhY3RpdmF0ZSgpCgpkZWFjdGl2YXRlIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBEZWFjdGl2YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9va3VwIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCA9PiAkUGFyYW17TmFtZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICBteSAlR3JvdXBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwR2V0KAogICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIGdyb3VwCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBVcGRhdGUoCiAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle2ludmFsaWR9LAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCkKCmZpbGwgdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgdHlwZV9pZCBjb2x1bW4gb2YgdGhlIHNlcnZpY2UgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2VydmljZSB0eXBlIGxpc3QKICAgIG15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBpZiAoICEkU2VydmljZVR5cGVMaXN0IHx8IHJlZiAkU2VydmljZVR5cGVMaXN0IG5lICdIQVNIJyB8fCAhJXskU2VydmljZVR5cGVMaXN0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGZpbmQgYW55IGl0ZW0gaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIElUU006OlNlcnZpY2U6OlR5cGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNvcnQgaWRzCiAgICBteSBAU2VydmljZVR5cGVLZXlMaXN0ID0gc29ydCBrZXlzICV7JFNlcnZpY2VUeXBlTGlzdH07CgogICAgIyB1cGRhdGUgdHlwZV9pZAogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzZXJ2aWNlCiAgICAgICAgICAgIFNFVCB0eXBlX2lkID0gPwogICAgICAgICAgICBXSEVSRSB0eXBlX2lkID0gMAogICAgICAgICAgICBPUiB0eXBlX2lkIElTIE5VTEwiLAogICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VUeXBlS2V5TGlzdFswXSBdLAogICAgKTsKfQoKPWhlYWQyIF9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpCgpmaWxsIHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIEM8Y3JpdGljYWxpdHk+IGNvbHVtbiBvZiB0aGUgc2VydmljZSB0YWJsZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICBteSBAQ3JpdGljYWxpdHlLZXlMaXN0ID0gc29ydCBrZXlzICV7ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9IH07CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhQENyaXRpY2FsaXR5S2V5TGlzdCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IGZpbmQgYW55IHBvc3NpYmxlIHZhbHVlcyBmb3IgSVRTTUNyaXRpY2FsaXR5IGluIGR5bmFtaWMgZmllbGQgY29uZmlndXJhdGlvbiEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgdXBkYXRlIGNyaXRpY2FsaXR5IHdpdGggdGhlIGZpcnN0IGNyaXRpY2FsaXR5IGVudHJ5CiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHNlcnZpY2UKICAgICAgICAgICAgU0VUIGNyaXRpY2FsaXR5ID0gPwogICAgICAgICAgICBXSEVSRSBjcml0aWNhbGl0eSA9ICcnCiAgICAgICAgICAgIE9SIGNyaXRpY2FsaXR5IElTIE5VTEwiLAogICAgICAgIEJpbmQgPT4gWyBcJENyaXRpY2FsaXR5S2V5TGlzdFswXSBdLAogICAgKTsKfQoKPWhlYWQyIF9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpCgpmaWxsIHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIHR5cGVfaWQgY29sdW1uIG9mIHRoZSBzbGEgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eVNMQVR5cGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNsYSB0eXBlIGxpc3QKICAgIG15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJFNMQVR5cGVMaXN0IHx8IHJlZiAkU0xBVHlwZUxpc3QgbmUgJ0hBU0gnIHx8ICEleyRTTEFUeXBlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpTTEE6OlR5cGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNvcnQgaWRzCiAgICBteSBAU0xBVHlwZUtleUxpc3QgPSBzb3J0IGtleXMgJXskU0xBVHlwZUxpc3R9OwoKICAgICMgdXBkYXRlIHR5cGVfaWQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2xhCiAgICAgICAgICAgIFNFVCB0eXBlX2lkID0gPwogICAgICAgICAgICBXSEVSRSB0eXBlX2lkID0gMAogICAgICAgICAgICBPUiB0eXBlX2lkIElTIE5VTEwiLAogICAgICAgIEJpbmQgPT4gWyBcJFNMQVR5cGVLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aGVhZDIgX01ha2VEeW5hbWljRmllbGRzSW50ZXJuYWwoKQoKQ29udmVydHMgdGhlIGR5bmFtaWMgZmllbGRzIHRvIGludGVybmFsIGZpZWxkcywgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGNhbiBub3QgYmUgZGVsZXRlZCBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01ha2VEeW5hbWljRmllbGRzSW50ZXJuYWwoKTsKCj1jdXQKCnN1YiBfTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBkZWZpbml0aW9uIGZvciBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIElUU00KICAgIG15IEBEeW5hbWljRmllbGRzID0gJFNlbGYtPl9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24oKTsKCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgIyBzZXQgYXMgaW50ZXJuYWwgZmllbGQKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGR5bmFtaWNfZmllbGQKICAgICAgICAgICAgICAgIFNFVCBpbnRlcm5hbF9maWVsZCA9IDEKICAgICAgICAgICAgICAgIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9NaWdyYXRlRFRMSW5TeXNDb25maWcoKQoKQ29udmVydHMgQzxEVEw+IHNldHRpbmdzIGluIHN5c2NvbmZpZyB0byBDPFRUPi4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlRFRMSW5TeXNDb25maWcoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZURUTEluU3lzQ29uZmlnIHsKCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJFByb3ZpZGVyT2JqZWN0ICA9IEtlcm5lbDo6T3V0cHV0OjpUZW1wbGF0ZTo6UHJvdmlkZXItPm5ldygpOwoKICAgIG15IEBOZXdTZXR0aW5nczsKCiAgICBOQU1FOgogICAgZm9yIG15ICROYW1lIChxdyhJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUgSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUpKSB7CgogICAgICAgICMgZ2V0IHNldHRpbmcncyBjb250ZW50CiAgICAgICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJE5hbWUpOwogICAgICAgIG5leHQgTkFNRSBpZiAhJFNldHRpbmc7CgogICAgICAgIE1FTlVNT0RVTEU6CiAgICAgICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAgICAgU0VUVElOR0lURU06CiAgICAgICAgICAgIGZvciBteSAkU2V0dGluZ0l0ZW0gKCBzb3J0IGtleXMgJXsgJFNldHRpbmctPnskTWVudU1vZHVsZX0gfSApIHsKCiAgICAgICAgICAgICAgICBteSAkU2V0dGluZ0NvbnRlbnQgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eyRTZXR0aW5nSXRlbX07CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGZvciBtaWdyYXRpbmcKICAgICAgICAgICAgICAgIG5leHQgU0VUVElOR0lURU0gaWYgISRTZXR0aW5nQ29udGVudDsKCiAgICAgICAgICAgICAgICBteSAkVFRDb250ZW50OwogICAgICAgICAgICAgICAgZXZhbCB7CiAgICAgICAgICAgICAgICAgICAgJFRUQ29udGVudCA9ICRQcm92aWRlck9iamVjdC0+TWlncmF0ZURUTHRvVFQoIENvbnRlbnQgPT4gJFNldHRpbmdDb250ZW50ICk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgaWYgKCRAKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkTWVudU1vZHVsZS0+JFNldHRpbmdJdGVtIDogJEAhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnskU2V0dGluZ0l0ZW19ID0gJFRUQ29udGVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBCdWlsZCBuZXcgc2V0dGluZy4KICAgICAgICAgICAgcHVzaCBATmV3U2V0dGluZ3MsIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICROYW1lIC4gJyMjIycgLiAkTWVudU1vZHVsZSwKICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAhQE5ld1NldHRpbmdzOwoKICAgICMgV3JpdGUgbmV3IHNldHRpbmcuCiAgICAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nc1NldCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENvbW1lbnRzID0+ICdJVFNNQ29yZSAtIHBhY2thZ2Ugc2V0dXAgZnVuY3Rpb246IF9NaWdyYXRlRFRMSW5TeXNDb25maWcnLAogICAgICAgIFNldHRpbmdzID0+IFxATmV3U2V0dGluZ3MsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX01pZ3JhdGVDb25maWdzKCkKCmNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlQ29uZmlncygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlQ29uZmlncyB7CgogICAgbXkgQE5ld1NldHRpbmdzOwoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgZm9yIG15ICRUeXBlIChxdyhJVFNNU2VydmljZSBJVFNNU0xBKSkgewoKICAgICAgICAjIG1pZ3JhdGUgSVRTTUNvcmUgUHJlZmVyZW5jZXMKICAgICAgICAjIGdldCBzZXR0aW5nIGNvbnRlbnQgZm9yIElUU01Db3JlIFByZWZlcmVuY2VzCiAgICAgICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICRUeXBlIC4gJzo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnICk7CgogICAgICAgIENPTkZJR0lURU06CiAgICAgICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAgICAgbXkgJE9sZE1lbnUgPSAkVHlwZSAuICJNZW51IjsKCiAgICAgICAgICAgICMgdXBkYXRlIG1vZHVsZSBsb2NhdGlvbgogICAgICAgICAgICBteSAkTW9kdWxlID0gJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnsnTW9kdWxlJ307CiAgICAgICAgICAgIGlmICggJE1vZHVsZSAhfiBte0tlcm5lbDo6T3V0cHV0OjpIVE1MOjokT2xkTWVudShcdyspfSApIHsKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE5ld01lbnUgPSAkVHlwZSAuICJNZW51OjokMSI7CiAgICAgICAgICAgICRNb2R1bGUgPX4gc3tLZXJuZWw6Ok91dHB1dDo6SFRNTDo6JE9sZE1lbnUoXHcrKX17S2VybmVsOjpPdXRwdXQ6OkhUTUw6OiROZXdNZW51fXhtc2c7CiAgICAgICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57TW9kdWxlfSA9ICRNb2R1bGU7CgogICAgICAgICAgICAjIEJ1aWxkIG5ldyBzZXR0aW5nLgogICAgICAgICAgICBwdXNoIEBOZXdTZXR0aW5ncywgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJFR5cGUgLiAnOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIycgLiAkTWVudU1vZHVsZSwKICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAhQE5ld1NldHRpbmdzOwoKICAgICMgV3JpdGUgbmV3IHNldHRpbmcuCiAgICAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nc1NldCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENvbW1lbnRzID0+ICdJVFNNQ29yZSAtIHBhY2thZ2Ugc2V0dXAgZnVuY3Rpb246IF9NaWdyYXRlQ29uZmlncycsCiAgICAgICAgU2V0dGluZ3MgPT4gXEBOZXdTZXR0aW5ncywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+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